磁盤上一段命名的存儲區。C 視文件為連續字節序列,每字節可單獨讀取。ANSI C 提供兩種視圖:文本視圖(行尾轉換)與二進制視圖(字節無轉換)。
stdio.h 標準庫,可移植,功能豐富,帶緩衝提高傳輸率。ANSI C 僅保證支持標準 I/O。程序啟動自動打開三個流:標準輸入 (stdin)、標準輸出 (stdout)、標準錯誤 (stderr)。
exit()argc 檢查參數個數,argv[0] 為程序名。exit(0) 正常退出,exit(EXIT_FAILURE) 異常退出。關閉所有打開文件。main() 中 return 與 exit() 效果同;遞歸 main() 中 return 僅返回上一級,exit() 直接終止進程。fopen() 打開文件FILE *fp = fopen("filename", "mode"); // mode: "r", "w", "a", "rb", "wb" 等
失敗返回 NULL,必須檢查。
getc() / putc() 字符 I/Och = getc(fp);
putc(ch, fpout);
putc(ch, stdout); // 等價 putchar(ch)
while ((ch = getc(fp)) != EOF) 或 fgetc() 返回 EOF 判斷。
fclose() 關閉文件刷新緩衝區,釋放資源。程序正常結束會自動關閉,但良習顯式調用。
fprintf() / fscanf()對文件操作的 printf/scanf 版本,首參為 FILE*。rewind(fp) 將文件位置指針移回開頭。
fgets() / fputs()fgets(buf, MAX, fp):讀取一行(含 \n)或 MAX-1 字符或至 EOF,末尾自動加 \0 成字串。注意:MAX 包含結束符空間。fputs(buf, fp):寫入字串(不自動加 \n)。gets() vs fgets()gets() 不檢查緩衝區大小,極易溢出,已被 C11 移除,嚴禁使用。永遠用 fgets()。
fseek() / ftell()fseek(fp, offset, whence); // whence: SEEK_SET(開頭), SEEK_CUR(當前), SEEK_END(結尾)
long pos = ftell(fp); // 返回距文件開頭字節數
offset 為 long,可正(前移)、負(後移)、零。ftell() 返回 long 位置,首字節位置為 0。fopen() 打開文件、建立緩衝區、創建管理結構體 (FILE 結構)。ungetc(c, fp):將字符推回輸入流,下次讀取先得到它。每次調用只能推回一字符。fflush(fp):強制刷新輸出緩衝區。fp=NULL 刷新所有輸出流。setvbuf(fp, buf, mode, size):自定義緩衝區。mode:_IOFBF全緩衝、_IOLBF行緩衝、_IONBF無緩衝。需在無操作前調用。fread(ptr, size, count, fp)、fwrite(ptr, size, count, fp)。按塊讀寫,保持內存位模式。適用結構體/數組批量存取。fwrite(buffer, 256, 1, fp) 寫 256 字節塊;fwrite(arr, sizeof(double), 10, fp) 寫 10 個 double。