fopen()FILE *fopen(char *filename, char *type);
分配 FILE 結構並返回指針。模式詳解:
| 模式 | 含義 |
|---|---|
r | 只讀打開 |
w | 只寫,截斷或創建 |
a | 追加寫入 |
rb/wb/ab | 二進制模式對應 |
r+/w+/a+ | 讀寫模式 |
rb+/wb+/ab+ | 二進制讀寫模式 |
失敗返回 NULL,必須檢查:
FILE *fp; if((fp=fopen("test","w"))==NULL) { printf("File cannot be opened\n"); exit(1); }
fclose()int fclose(FILE *stream); // 成功返回 0 int fcloseall(); // 關閉所有打開文件,返回關閉數量
寫入時緩衝區未滿不會落盤,必須 fclose 確保數據完整性。
fgetc/fputc(函數)、getc/putc/getchar/putchar(宏/函數)。返回 int 以容納 EOF(-1)。fgets(讀 n-1 字符或遇 \n 停止,補 \0)、fputs(寫字符串不含 \0)、gets/puts(不安全/自動換行,保留兼容)。fprintf/fscanf 對應 printf/scanf,目標為文件流。fread/fwrite 按 size*count 字節讀寫,返回實際項數,可實現對象序列化。fflush(stream) 清除輸出緩衝區,flushall() 清除所有。setbuf(stream, buf) 設置用戶緩衝區(大小 BUFSIZ),buf=NULL 關閉緩衝。setvbuf(stream, buf, type, size):_IOFBF全緩衝、_IOLBF行緩衝、_IONBF無緩衝。ftell(fp) 返回當前位置偏移量(二進制流精確,文本流因換行翻譯可能不精確)。fseek(fp, offset, origin):SEEK_SET開頭、SEEK_CUR當前、SEEK_END結尾。副作用:清除行末標志、丟棄 ungetc 回退字符、允許讀寫模式切換。rewind(fp) 定位開頭並清除錯誤標志。fgetpos/fsetpos 可移植的位置保存/恢復(fpos_t 類型不透明)。feof(fp) 到達文件尾返回真。ferror(fp) 發生讀寫錯誤返回真。clearerr(fp) 重置錯誤標志。tmpfile() 創建 wb+ 模式臨時文件,關閉自動刪除。tmpnam(buf) 生成唯一文件名(TMP_MAX 保證不重複)。remove(filename)、rename(old, new),成功返回 0。文件打開時行為編譯器相關。io.h)DOS 3.0+ 支持。文件描述符(整數)而非 FILE*。
open(filename, access):access = 基本模式 | 修飾符(O_RDONLY/O_WRONLY/O_RDWR | O_APPEND/O_CREAT/O_TRUNC/O_BINARY/O_TEXT)。成功返回非負描述符,失敗 -1。close(handle) 關閉。read(handle, buf, count)、write(handle, buf, count) 返回實際字節數。lseek(handle, offset, fromwhere)、tell(handle) 對應 fseek/ftell。