C的I/O函數備忘錄

單字符的I/O

int getc(FILE* ): 1.可能實現爲宏;2.出錯或達到文件尾返回EOF;
int fgetc(FILE* ): 1.一定是函數;2.出錯或達到文件尾返回EOF;
int getchar(voiid): 1.從標準輸入讀取,等價於fgetc(stdin);2.出錯或達到文件尾返回EOF;
int ungetc(int c, FILE* fp): 1.回送的字符不必等於上次讀到的字符;2.不能回送EOF;3.到達文件尾後仍然能回送字符,且會清楚該流的文件結束標記;4.支持任意次數的回送;回送的字符會重新回到流緩衝區中;
int putc(int c, FILE* fp): 1.可能實現爲宏;2.成功則返回c,出錯則返回EOF;
int fputc(int c, FILE* fp): 1.一定是函數;2.成功則返回c,出錯則返回EOF;
int putchar(int c): 1.輸出到標準輸出,等價於fputc(c, stdout);2.成功則返回c,出錯則返回EOF;

單行的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

int fprintf(FILE* fp, const char* format, ...): 1.將格式化字符寫入流;2.成功返回輸出字符數,出錯返回負值;
int printf(const char* format, ...): 1.輸出到標準輸出;2.成功返回輸出字符數,出錯返回負值;
int dprintf(int fd, const char* format, ...): 1.輸出到指定的文件描述符;2.成功返回輸出字符數,出錯返回負值;
int sprintf(char* buf, const char* format, ...): 1.將格式化字符寫入數組buf中;2.自動在尾部添加null字節,但不包括在返回值中;
int snprintf(char* buf, size_t n, const char* format, ...): 1.將格式化字符寫入數組buf中;2.自動在尾部添加null字節,但不包括在返回值中;最多保存n-1個字符,超出的字符會被丟棄,但是會包括在返回值中;
int vfprintf(FILE* fp, const char* format, va_list arg): 
int vprintf(const char* format, va_list arg): 
int vdprintf(int fd, const char* format, va_list arg): 
int vsprintf(char* buf, const char* format, va_list arg): 
int vsnprintf(char* buf, size_t n, const char* format, va_list arg): 1.跟前面不加v的函數基本一樣,用arg取代不定常參數;
int fscanf(FILE* fp, const char* format, ...): 1.成功返回輸入項數,出錯或到達文件尾,返回EOF;
int scanf(const char* format, ...): 1.從標準輸入讀取;2.成功返回輸入項數,出錯或到達文件尾,返回EOF;
int sscanf(const char* buf, const char* format, ...): 1.從字符串讀取;2.成功返回輸入項數,出錯或到達文件尾,返回EOF;
int vfscanf(FILE* fp, const char* format, va_list arg):
int vscanf(const char* format, va_list arg): 
int vsscanf(const char* buf, const char* format, va_list arg): 1.跟前面不加v的函數基本一樣,用arg取代不定常參數;

定位流

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;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章