Linux
| 標準IO
編程
時間:2024年6月8日23:03:43
文章目錄
- `Linux` | 標準`IO`編程
- 1.標準`IO`編程
- 1-1.流的打開
- 1-2.流的關閉
- 1-3.錯誤處理
- 函數原型perror
- 參數
- 功能
- 返回值
- 使用示例
- 注意事項
- 額外信息
- 函數原型strerror
- 參數
- 返回值
- 使用示例
- 注意事項
- errno 變量
- 總結
- 1-4.流的讀寫
- 1-4-1.按字符(字節)輸入/輸出
- 實例
- 1-4-2.按行輸入/輸出
- 1-4-3.以指定大小為單位讀寫文件
- 1-5.流的定位
- fseek()函數
- 函數原型
- 參數說明
- 示例 2:將文件指針從當前位置向后移動 100 個字節
- 注意事項
- ftell()函數
- 函數原型
- 參數說明
- 返回值
- 示例和用法
- 示例 1:讀取文件并輸出當前位置
- 示例 2:只獲取文件大小(不是標準方法,但可以用作簡單示例)
- 注意事項
- 1-6.格式化輸入輸出
- 格式化輸入函數
- 格式化輸出函數
1.標準IO
編程
1-1.流的打開
fopen
是 C 語言中用于打開文件的標準庫函數。它屬于 <stdio.h>
頭文件,并用于創建或打開一個文件,以便進行后續的文件讀寫操作。
函數的原型通常如下:
FILE *fopen(const char *filename, const char *mode);
參數說明:
-
filename
:要打開或創建的文件的名稱(包括路徑,如果需要的話)。 -
mode
:一個字符串,指定了文件的打開模式。這些模式可以是以下值之一或它們的組合(注意,并非所有組合都是有效的):"r"
:以只讀方式打開文件。文件必須存在。"w"
:以寫入方式打開文件。如果文件不存在,則創建它;如果文件存在,則其內容被截斷為零長度。"a"
:以追加模式打開文件。如果文件不存在,則創建它;如果文件存在,則寫入的數據會被追加到文件的末尾。"r+"
:以讀寫方式打開文件。文件必須存在。"w+"
:以讀寫方式打開文件。如果文件不存在,則創建它;如果文件存在,則其內容被截斷為零長度。"a+"
:以讀寫方式打開文件用于追加。如果文件不存在,則創建它;如果文件存在,則寫入的數據會被追加到文件的末尾。"b"
:二進制模式(可以與上述模式組合使用,如"rb"
或"wb+"
)。在 Windows 系統上,當以文本模式打開文件時,\n
會被轉換為\r\n
,而在讀取時,\r\n
會被轉換為\n
。在二進制模式下,這種轉換不會發生。
返回值:
- 如果文件成功打開,
fopen
返回一個指向FILE
對象的指針,該對象可用于后續的文件操作。 - 如果文件打開失敗,
fopen
返回NULL
。
示例:
#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");fclose(file);return 0;
}
在這個示例中,我們試圖以寫入模式(“w”)打開一個名為 “example.txt” 的文件。如果文件打開成功,我們向其中寫入 “Hello, World!\n”,然后關閉文件。如果文件打開失敗,我們打印一條錯誤消息并返回 1。
1-2.流的關閉
fclose
是 C 語言中用于關閉一個已打開的文件的標準庫函數。當你使用 fopen
或其他相關函數打開一個文件后,在完成對該文件的讀寫操作后,應該使用 fclose
函數來關閉它。關閉文件是一個重要的步驟,因為它會釋放與文件關聯的所有資源,并確保所有的數據都被正確地寫入到磁盤中。
函數的原型如下:
int fclose(FILE *stream);
參數說明:
stream
:一個指向FILE
對象的指針,該對象是由fopen
或其他相關函數返回的。
返回值:
- 如果文件成功關閉,
fclose
返回零(0
)。 - 如果發生錯誤,
fclose
返回非零值(通常是EOF
,它在<stdio.h>
中定義,通常是一個負數)。
示例:
#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");// 關閉文件if (fclose(file) != 0) {printf("Failed to close file\n");return 1;}return 0;
}
在這個示例中,我們在寫入 “Hello, World!\n” 到文件后,使用 fclose
函數來關閉文件。如果關閉文件時發生錯誤,我們打印一條錯誤消息并返回 1。然而,在大多數情況下,關閉文件通常不會失敗,除非發生了磁盤錯誤或其他嚴重的系統問題。
請注意,在嘗試讀取或寫入一個已關閉的文件時,程序的行為是未定義的,并且可能會導致程序崩潰或數據損壞。因此,確保在文件不再需要時關閉它是非常重要的。
1-3.錯誤處理
perror
是 C 語言標準庫中的一個函數,它主要用于處理系統調用或庫函數調用失敗時產生的錯誤。以下是關于perror
函數的詳細解釋:
函數原型perror
void perror(const char *s);
參數
s
:這是一個指向字符串的指針,用于在錯誤信息前添加自定義的描述信息。如果s
為NULL
或空字符串,則只輸出錯誤描述。
功能
perror
函數將最近的系統錯誤代碼(存儲在全局變量errno
中)轉換為人類可讀的錯誤描述,并將這個描述輸出到標準錯誤流(stderr
)。- 如果提供了自定義的字符串
s
,則這個字符串會被輸出在錯誤信息之前,并后跟一個冒號和空格。
返回值
perror
函數沒有返回值(即返回類型為void
)。
使用示例
#include <stdio.h>
#include <stdlib.h>int main() {FILE *fp = fopen("nonexistent_file.txt", "r");if (fp == NULL) {perror("File opening failed"