資料流有兩種通用型別,文字流與二進位製流,文字流由分成行的字串行組成,二進位製流是char型別的資料值序列。基於資料流的概念,c語言有豐富而有用途的輸入輸出函式,這些函式多在stdio.h、wchar.h中定義,資料型別file儲存資料流的資訊。
file* fopen(const char* restrict filename, const char* restrict mode);
fopen帶有檔名和訪問方式兩個引數,檔名按實現指定的方式開啟或建立檔案,將其和乙個資料流相關聯,巨集filename_max指定了檔名的最大長度,fopen_max指定了可以同時開啟的資料流個數,至少為8個,包括stdin、stdout、stderr。
int fclose(file* restrict stream);
fclose按適當方式有序地關閉已開啟的資料流,包括清空必要的內部資料緩衝區,錯誤返回eof,否則返回0。
int fflush(file* restrict stream);
fflush用於清空與輸出或更新資料流引數相關的任何緩衝區,通常只用於異常情況,正常情況下由fclose與exit負責重新整理輸出緩衝區。
file* freopen(const char* restrict filename,
const char* restrict mode,
file* restrict stream);
freopen類似與先後呼叫了fclose和fopen,乙個主要用途是將stdin、stdout與stderr之一重新關聯到另一檔案。
int fwide(file* restrict stream, int orient);
fwide用來設定與測試流定向。
int setvbuf(file* restrict stream,
char* restrict buf,
int bufmode,
size_t size);
setvbuf允許程式設計人員在極少數預設緩衝區無法滿足要求的情況下控制資料流的緩衝策略,函式要在開啟流之後和讀取或寫入任何資料之前呼叫。
void setbuf(file* restrict stream,
char* restrict buf);
setbuf是setvbuf的簡化形式。
int fseek(file* restrict stream, long int offset, int wherefrom);
fseek設定資料流位置,wherefrom可選seek_set、seek_cur、seek_end,分別表示0、1、2,即檔案開頭、檔案當前、檔案結尾位置。
long int ftell(file* restrict stream);
ftell返回資料流當前位置。
void rewind(file* restrict stream);
rewind將資料流復位到開頭。
int fgetpos(file* restrict stream, fpos_t *pos);
fgetpos將當前檔案位置存放在pos所指的物件中,主要用於大檔案的處理。
int fsetpos(file* restrict stream, const fpos_t *pos);
fsetpos根據*pos的值設定當前檔案位置,也是主要用於大檔案的處理。
int fgetc(file* stream);
fgetc從輸入流中讀取下乙個字元並將其作為int型別的值返回。輸出與fputc對應。
int getc(file* stream);
getc與fgetc類似,只是getc通常實現為巨集,更加高效。輸出與putc對應。
int getchar(void);
getchar等價於getc(stdin),也通常實現為巨集。輸出與putchar對應。
int ungetc(int c, file *stream);
ungetc將字元c轉換成無符號char並推回指定的輸入流。
char* fgets(char *s, int n, file* stream);
fgets將字元從輸入流中讀取到s中,最多讀取n-1個字元,然後在末尾新增乙個終止null字元。輸出與fputs對應。
char* gets(char *s);
gets從標準輸入流stdin讀取字元到字元陣列s中,但很危險,因為長度未知。輸出與puts對應。
int fscanf(file* restrict stream, const char* restrict format, ...);
int vfscanf(file* restrict stream, const char* restrict format, va_listarg);
fscanf分析格式化輸入文字,從第乙個引數指定的資料流讀取字元並控制字串格式轉換序列,根據控制字串內容,可能還需要其它引數,控制字串後面的每個引數應為指標,從輸入流讀取的值轉換之後存放在指標指定的物件中,vfscanf增加了可變參數列。輸出與fprintf、vfprintf對應。
int scanf(const char* restrict format, ...);
int vscanf(const char* restrict format, va_list arg);
scanf從標準輸入流stdin讀取字元,vscanf增加了可變參數列。輸出與printf、vprintf對應。
int sscanf(char *s, const char* restrict format, ...);
int vsscanf(char *s, const char* restrict format, va_list arg);
sscanf從字串s讀取字元,vsscanf增加了可變參數列。輸出與sprintf、vsprintf對應,c99增加了snprintf,可以計算非寬字元的字元數。
size_t fread(void* restrict ptr,
size_t element_size,
size_t count,
file* restrict stream);
size_t fwrite(const void* restrict ptr,
size_t element_size,
size_t count,
file* restrict stream);
fread和fwrite分別輸入和輸出到二進位制檔案。
int feof(file* stream);
int ferror(file* stream);
void clearerr(file* stream);
feof的引數是個輸入流,如果讀取輸入流時遇到檔案末尾,則返回乙個非0值,否則返回0,這個函式通常在輸入操作失敗之後使用。ferror返回資料流的錯誤狀態。clearerr重置資料流中的任何錯誤和檔案末尾指示,用fclose關閉資料流時也重置錯誤條件。
int rename(const char *oldname, const char *newname);
int remove(const char *filename);
remove刪除指定檔案,在操作成功時返回0,否則返回非0值。rename將名稱oldname變成newname。
file* tmpfile(void);
char* tmpnam(char *buf);
tmpfile生成乙個新檔案並用fopen方式「w+b」開啟,檔案關閉或程式終止時,刪除這個檔案。tmpnam生成不與當前使用的其它檔名發生衝突的新檔名,這樣生成的檔案不是臨時檔案,程式終止時並不自動刪除這個檔案。
C C 輸入輸出流
istream中的類 如cin 提供了一些面向行的類成員函式 getline 和get 這兩個函式都讀取一行輸入,直到達到換行符。不同的是,getline 將丟棄換行符,而get 將換行符保留在輸入序列中。目錄 一 字串 i o 二 string類 i o 1.面向行的輸入 getline getl...
標準輸入輸出流列印流資料流
1.1 system.in 標準的輸入流,預設從鍵盤輸入 system.out 標準的輸出流,預設從控制台輸出 1.2system類的setin inputstream is setout printstream ps 方式重新指定輸入和輸出的流。列印流 printstream 和printwrit...
C c 輸入輸出函式
最全輸入函式 c c 一 c getchar 功能 讀入乙個字元 說明 呼叫此函式時要求在程式的第一行有預編譯命令 include,不過在做c 時 有 include也夠了。變數c獲得乙個從標準裝置上讀取的字元 值。當從鍵 盤上輸入 z 即ctrl和z鍵同時按下 時,c得到的值是 1,z稱檔案結尾,...