《C程序設計語言》筆記 (十五) 參考手冊7
阿新 • • 發佈:2017-11-17
ctype har pfile lib type 文件名 一次 錯誤處理函數 自動刪除
標準庫
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 否則返回0 fflush(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‘結束 vprintf vfprintf vsprintf 函數分別對應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 如果達到文件末尾或發生錯誤,返回EOF char *fgets(char *s,int n,FILE *stream); fgets 函數最多將n-1個字符讀入到數組s中 當遇到換行符時,把換行符讀入到數組s中,讀取過程終止 數組以‘\0‘結尾 到達文件尾或發生錯誤,返回EOF int fputc(int c,FILE *stream); fputc函數把字符c輸出到stream中 返回寫入的字符,出錯返回EOF int fputs(const char *s,FILE *stream); fputs函數把字符串s輸出到stream中,出錯返回EOF int 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