標籤:offset format 輸出資料流 兩種 const 文字檔 scan fputs 數組
標準庫
ANSI定義的標準函數庫標準庫不是C語言本身的構成部分但是支援標準C的實現會提供該函數庫中的函式宣告、類型以及宏定義標準庫中的函數 類型以及宏分別在下面的標準標頭檔中定義:<assert.h><ctype.h><errno.h><float.h><limits.h><locale.h><math.h><setjmp.h><signal.h><stdarg.h><stddef.h><stdio.h><stdlib.h><string.h><time.h>可以通過下列方式訪問標頭檔#include <標頭檔>標頭檔的包含順序是任意的,並可以包含任意多次標頭檔必須包含在任何外部聲明或定義之外必須在使用標頭檔中的任意聲明之前包含標頭檔標頭檔不一定是源檔案以底線開頭的外部標識符保留給標準庫使用
輸入輸出<stdio.h>
標頭檔<stdio.h>中定義的輸入輸出函數、類型以及宏的數目幾乎占整個標準庫的三分之一流是與磁碟或其他外圍裝置關聯的資料的源或目的地儘管在某些系統中(如UNIX),文字資料流和二進位流是相同的,但標準庫任然提供了這兩種類型的流文字資料流是由文本行組成的序列,每一行包含0個或多個字元並以‘\n‘結尾二進位流是由未經處理的位元組構成的序列,這些位元組記錄著內部資料如果在同一系統中寫入二進位流,然後再讀取二進位流,則讀出和寫入的內容完全相同開啟一個流,將把該流和一個檔案或裝置串連起來,關閉流將中斷連線開啟一個檔案將返回一個指向FILE類型的對象的指標,該指標記錄了控制該流的所有必要資訊程式開始執行時,stdin stdout 和stderr這3個流已經處於開啟狀態
檔案操作
FILE *fopen(const char *filename,const char *mode);fopen函數開啟filename指定的檔案,並返回一個與之關聯的流如果開啟失敗,則返回NULL訪問模式:"r" 讀"w" 寫,並刪除已存在的內容"a" 追加"r+" 開啟文字檔用於更新"w+" 建立文本用於更新"a+" 開啟或建立檔案用於更新,寫檔案時追加到檔案末尾
FILE *freopen(const char *filename,const char *mode,FILE *stream);以mode指定的模式開啟filename指定的檔案,並將該檔案關聯到stream指定的流成功返回stream,出錯返回NULL freopen 函數一般用於改變與stdin stdout stderr相關聯的檔案int fflush(FILE *stream);對輸出資料流來說,fflush函數將已寫到緩衝區但尚未寫入檔案的所有資料寫入檔案對輸入資料流來說,其結果是未定義的如果在寫的過程中方式錯誤,則返回EOF 否則返回0fflush(NULL) 將清洗所有的輸出資料流int flose(FILE *stream);將所有未寫入的資料寫入stream中,丟棄緩衝區的所有未讀輸入資料,釋放自動分配的全部緩衝區,最後關閉流若出錯返回EOF,否則返回0
int remove(const char *filename);刪除指定的檔案,如果刪除失敗,返回一個非0值.int rename(const char *oldname,const char *newname);修改檔案名稱,失敗返回非0;FILE *tmpfile(void);tmpfile函數以模式"wb+"建立一個臨時檔案,該檔案在被關閉或程式正常結束時自動刪除char *tmenam(char s[L_tmpname]);tmpnam(NULL) 函數建立一個與現有檔案名稱不同的字串,並返回一個指向一內部靜態數組的指標int setvbuf(FILE *stream,char *buf,int mode, size_t size);setvbuf函數控制流程stream的緩衝.在執行讀寫以及其他任何操作之前必須調用此函數void setbuf(FILE *stream,char *buf);如果buf值為NULL,則關閉stream的緩衝
格式化輸出
printf函數提供格式化輸出轉換int fprintf(FILE *stream,const char *format,...);fprintf函數按照format說明的格式對輸出進行轉換,並寫到stream中。返回實際寫入的字元數,錯誤返回負值int sprintf(char *s,const char *format,...);sprintf函數和printf函數基本相同,但其輸出將被寫入到字串 s中,並以‘\0‘結束vprintfvfprintfvsprintf函數分別對應printf的函數等價
格式化輸入
scanf函數處理格式化輸入轉換int fscanf(FILE *stream,const char *format,...);fscanf函數根據格式字串format從流stream中讀取輸入,並把轉換後的值賦值給後續參數,其中每個參數必須是一個指標int sscanf(const char *s,const char *format,...);sscanf函數scanf等價,所不同的是,前者的輸入字元來源於字串s
字元輸入/輸出函數
int fgetc(FILE *stream);函數返回stream流的下一個字元,傳回型別unsigned char如果達到檔案末尾或發生錯誤,返回EOFchar *fgets(char *s,int n,FILE *stream);fgets 函數最多將n-1個字元讀入到數組s中當遇到分行符號時,把分行符號讀入到數組s中,讀取過程終止數組以‘\0‘結尾到達檔案尾或發生錯誤,返回EOFint fputc(int c,FILE *stream);fputc函數把字元c輸出到stream中返回寫入的字元,出錯返回EOFint fputs(const char *s,FILE *stream);fputs函數把字串s輸出到stream中,出錯返回EOFint getc(FILE *stream);getc函數等價於fgetc,所不同的是,當getc函數定義為宏時,它可能多次計算stream的值int getchar(void);等價於getc(stdin);char *gets(char *s);把下一個輸入行讀入的數組中int putc(int c ,FILE *stream);int putchar(int c);等價於 putc(c,stdout);int puts(const char *s);int ungetc(int c,FILE *stream);
直接輸入/輸出函數
size_t fread(void *ptr,size_t size,size_t nobj,FILE *stream);size_t fwrite(const void *ptr,size_t size,size_t nobj,FILE *stream);
檔案定位函數
int fseek(FILE *stream,long offset,int origin);long ftell(FILE *stream);void rewind(FILE *stream);int fgetpos(FILE *stream,fpos_t *ptr);int fsetpos(FILE *stream,const fpos_t *ptr);
錯誤處理函數
當發生錯誤或到達檔案末尾時,標準庫中的許多函數都會設定狀態指示器這些狀態指示器可被顯式的設定和測試另外,整型運算式errno可以包含一個錯誤編號,據此可以進一步瞭解最近一次出錯資訊void clearerr(FILE *stream);clearerr函數清除與流stream相關的檔案結束符合錯誤指示符int feof(FILE *stream);如果設定了與stream流相關的檔案結束符,feof函數將返回非0值int ferror(FILE *stream);void perror(const char *s);fprintf(stderr,"%s,:%s\n",s"error message");
《C程式設計語言》筆記 (十五) 參考手冊7