單字符的I/O
單行的I/O
char* fgets(char* buf, int n, FILE* fp): 1.成功返回buf,已到達文件尾或出錯返回null;2.讀取了n-1個字符(包括換行符)或在讀取n-1個字符前讀取到換行符或到達文件尾則停止讀取;3.緩衝區自動在讀取字符後面添加null字節;
char* gets(char* buf): 1.從標準輸入讀取;2.成功返回buf,已到達文件尾或出錯返回null;3.不能指定緩衝區大小,不推薦使用;4.不將讀取到換行符存入緩衝區;
int fputs(const char* str, FILE* fp): 1.成功返回非負值,失敗返回EOF;2.尾端的null字節不會被寫到流中;
int puts(const char* str): 1.輸出到標準輸出;2.尾端的null字節不會被寫到流中;3.會自動在末尾添加換行符;
二進制I/O
size_t fread(void* ptr, size_t size, size_t nobj, FILE* fp): 1.返回寫入的對象數;2.如果返回值小於所要求的nobj則出錯;3.只能用於讀取同一系統(最好同一編譯器編譯)上程序已寫的數據,否則可能因爲對齊,大小端等問題出錯;
size_t fwrite(const void* ptr, size_t size, size_t nobj, FILE* fp): 1.如果出錯或達到文件尾,返回值可以小於nobj;
格式化I/O
定位流
long ftell(FILE* fp): 1.返回但其文件位置,出錯返回-1;
int fseek(FILE* fp, long offset, int whence): 1.對於文本文件,whence只能是SEEK_SET(文件起始位置),offset只能是0或ftell的返回值;2.成功返回0,出錯返回-1;
void rewind(FILE* fp): 1.將流設置到文件的起始位置;
int fgetpos(FILE* fp, fpos_t* pos): 1.將當前文件位置保存在pos;2.成功返回0,否則返回非0;
int fsetpos(FILE* fp, const fpos_t* pos): 2.將當前文件位置設置爲pos;2.成功返回0,否則返回非0;
緩衝
void setbuf(FILE* fp, char* buf): 1.如果buf爲NULL,流設置爲不緩衝,否則buf必須指向長度至少爲BUFSIZ的緩存區,流設置爲全緩衝;2.必須在流打開後和執行任何一個其他操作之前調用;
int setvbuf(FILE* fp, cahr* buf, int mode, size_t size): 1.設置流的緩衝模式和緩衝大小等;2.必須在流打開後和執行任何一個其他操作之前調用;3.成功返回0,否則返回非0;
int fflush(FILE* fp): 1.使流所有未寫的數據都被傳送至內核;2.如果fp是NULL,則所有輸出流都被沖洗;3.成功返回0,出錯返回EOF;
打開與關閉
FILE* fopen(const char* pathname, const char* type):
FILE* freopen(const char* pathname, const char* type, FILE* fp): 1.在指定的流上打開指定的文件,如果該流已經打開,則先關閉,如果流已經定向,則清除定向;2.一般用於將一個文件打開爲一個預定義的流:標準輸入,標準輸出或標準錯誤;
FILE* fdopen(int fd, const char* type): 1.將文件描述符轉化流;
type可以爲以下值:
"r"或“rb”: 爲讀而打開
"w"或"wb": 爲寫而打開
"a"或"ab": 追加;爲在文件尾寫而打開,或爲寫而創建
"r+"或"r+b"或"rb+": 爲讀和寫而打開,不截斷文件
"w+"或"w+b"或"wb+": 爲讀和寫而打開,把文件截斷至0長
"a+"或"a+b"或"ab+": 爲在文件尾讀和寫而打開或創建
當以讀寫打開文件時(type中有+),具有以下的限制:
1.如果中間沒有fflush,fseek,fsetpos,rewind,則在輸出的後面不能直接跟隨輸入
2.如果中間沒有fseek,fsetpos,rewind,或者一個輸入操作沒有到達文件尾,則在輸入操作之後不能直接跟隨輸出
int fclose(FILE* fp): 1.沖洗緩衝中的輸出數據,丟棄緩衝區中的輸入數據;2.即使調用失敗,流也不再跟文件和緩衝區關聯;3.成功返回0,出錯返回EOF;
錯誤處理
int feof(FILE*): 1.判斷是否達到文件尾(並且嘗試進行讀操作等),條件爲真返回非0,否則返回0;
int ferror(FILE*): 1.判斷流是否出錯,條件爲真返回非0,否則返回0;
void clearerr(FILE*): 1.清除流的eof和error標誌;
void perror(const char* str): 1.根據全局變量errno打印錯誤信息,如果str非null,在錯誤信息前加str的內容;
臨時文件
char* tmpnam(char* ptr): 1.產生一個跟現有文件名不同的一個有效路徑名字符串;2.最多調用次數是TMP_MAX;3.如果ptr是NULL,路徑名保存在靜態區中(會被下次調用覆蓋),如果不是NULL,ptr指向至少是L_tmpnam個字符的數組;3.失敗返回NULL;
FILE* tmpfile(void): 1.創建一個臨時的二進制文件(類型wb+);2.關閉該文件或程序結束自動刪除文件,程序異常終止時是否刪除文件取決於實現;3.失敗返回NULL;