c 和 文件 函數操作

1.fopen()

原型:FILE * fopen(const char* filename, const char* mode);

說明:

fopen 實現三個功能:爲使用而打開一個流;把一個文件和此流相互鏈接;給此流返回一個FILR指針。

parameter filename--指向要打開的文件名,

parameter mode--表示打開狀態的字符串。

"r"以只讀方式打開文件

"w"以只寫方式打開文件

"a"以追加方式打開文件

"r+"以讀/寫方式打開文件,如果無文件出錯的話

"w+"以讀/寫方式打開文件,如果無文件生成新文件的話

一個文件可以以文本模式或二進制模式打開,這兩種的區別是:

在文本模式中回車被當成一個字符'/n',而二進制模式認爲它是兩個字符 0x0D,0x0A;如果再文件中讀到0x1B,文本模式會認爲這是結束符,也就是二進制模式不會對文件進行處理,而文本文件方式會按照一定的方式對數據做相應的轉換。

系統默認以文本模式打開,可以修改全部變量_fmode的值來修改這個設置,例如 _fmode=O_TEXT;這就設置默認打開方式爲文本模式;而_fmode=O_BINARY;則設置默認打開方式是二進制方式。

在模式字符串中指定打開的模式,如"rb"表示以二進制模式打開只讀文件,"w+t"或"wt+"表示以文本模式打開讀/寫文件。

此函數返回一個FILE指針,所以申明一個FILE指針後不用初始化,而是用fopen()來返回一個指針並與一個特定的文件相連,如果失敗,返回NULL。

2.fclose()

原型:int fclose(FILE* fp);

說明:fclose()的功能就是關閉用fopen()打開的文件。程序編寫中,需要注意這兩者的對應關係,否則,會造成數據丟失的情況。

如果成功,返回0;失敗返回EOF。

3.fputc()

原型:int fputc(int c, FILE* stream);

說明:向流中寫一個字符。成功返回這個字符;失敗返回EOF。fputc會將參數c轉爲unsigned char 後傳入參數stream指定的文件。


4.fgetc()

原型:int fgetc(FILE* stream);

說明:成功返回這個字符;失敗返回EOF。


5.fseek()

原型:int fseek(FILE* stream, long offset, int whence);

說明:此函數一般用於二進制模式打開的文件中,功能是定位到流中指定的位置。

如果成功,返回0,參數offset是移動的字節數,whence是移動的基準,取值是:

符號常量值   基準位置

SEEK_SET0 文件開頭

SEEK_CUR1 當前讀寫的位置

SEEK_END2 文件尾部

6.fputs()

原型:int fputs(const char* s, FILE* stream);


7.fgets()

原型:char* fgets(char* s, int n, FILE* stream);

說明:從流中讀一行或指定個字符。從流中讀取n-1個字符,除非讀完一行,參數s是接受字符串。如果成功,返回s的指針,否則,返回NULL。


8.fprintf()

原型:int fprintf(FILE* stream, const char* format[, argument, ...]);

說明:按照格式輸入到流,其用法和printf()相同,不過不是寫到控制檯,而是寫到流。


9.fscanf()

原型:int fscanf(FILE* stream, const char* format[, address, ...]);

說明:從流中按格式讀取,其用法和scanf()相同,不過不是從控制檯讀取,而是從流讀取。


10.feof()

原型:int feof(FILE* stream);

說明:檢測是否已到文件尾,是返回真;否則,返回0。


11.ferror()

原型:int ferror(FILE* stream);

說明:返回流最近的錯誤代碼,可用clearerr()來清除。cleareer原型是void cleareer(FILE* stream);


12.rewind()

原型:void rewind(FILE* stream);

說明:把當前的讀寫位置回到文件開始。其實,本函數相當於fseek();


13.remove()

原型:int remove(const char* filename);

說明:刪除文件。參數就是刪除文件的文件名,成功返回0。


14.fread()

原型:size_t fread(void* ptr, size_t size, size_t n, FILE* stream);

說明:從流中讀指定個數的字符。

參數ptr是保存讀取的數據,

void* 的指針可用任何類型的指針來替換,如char*、int* 等等來替換;

size是每塊的字節數;

n是讀取的塊數。

如果成功,返回實際讀取的塊數(不是字節數),本函數一般用於二進制模式打開文件中。

15.fwrite()

原型:size_t fwrite(const void* ptr, size_t size, size_t n, FILE* stream);

說明:與fread對應,向流中寫指定的數據。

參數ptr是要寫入的數據指針,void*的指針可用任何類型的指針來替換,如char*、int*等等來替換;

size是每塊的字節數;

n是要寫的塊數。

如果成功,返回實際寫入的塊數(不是字節數),本函數一般用於二進制模式打開的文件中。


16.tmpfile()

原型:FILE* tmpfile(void);

說明:生成一個臨時文件。以"w+b"的模式打開,並返回這個臨時流的指針。如果失敗,返回NULL。在程序結束後,這個文件會被自動刪除。


17.tmpnam()

原型:char* tmpnam(char* s); 

說明:

     生成一個唯一的文件名,其實tmpfile()就調用了此函數,參數s用來保存得到的文件名,並返回這個指針。如果失敗,返回NULL。


18.ftell()
原型:long ftell(FILE* fp);
說明:得到流式文件的當前讀寫位置,其返回值是當前讀寫位置偏離文件頭部的字節。

19.memset() ---初始化申請的內存
原型:void *memset(void *s, char ch, size_t n);
說明:將s中前n個字節(typedef unsigned int size_t)用ch替換並返回s。

20.malloc() --- 向系統申請分配空間
原型:extern void *malloc(unsigned in num_bytes);
說明:如果分配成功,則返回被分配的內存地址(此存儲區中的初始值不確定),否則返回空指針NULL。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。

21.realloc() --- 新的大小一定要大於原來的大小,不然會導致數據丟失
原型:extern void *realloc(void *mem_address, unsigned int newsize);
說明:先判斷當前的指針是否有足夠的連續空間,如果有,擴大mem_address指向的地址,並且將mem_address返回;如果空間不夠,先按照newsize指定的大小分配空間,將原有數據從頭到尾拷貝到新分配的內存區域,而後釋放原來mem_address所指向的內存區域(注意:原來指針是自動釋放,不需要使用free),同時返回新分配的內存區域的首地址。即重新分配存儲器塊的地址。
           返回值:如果重新分配成功,則返回指向被分配內存的指針,否則,返回空指針NULL。

22.calloc() ---動態存儲區中分配
原型:void *calloc(unsigned n, unsigned size);
功能:在內存的動態存儲區中分配n個長度爲size的連續空間,函數返回一個指向分配其實地址的指針;如果分配不成功,返回NULL。

23.free() --- 釋放存儲空間
原型:void free(void *ptr);
說明:內存塊釋放。釋放ptr指向的存儲空間。被釋放的空間通常被送入可用存儲區,以後可在調用malloc、realloc以及calloc函數來再分配。


已經測試過如下結論:
char ch = getchar();等價於char ch = fgetc(stdin);功能也等價於scanf("%c", &ch);也等價於fscanf(stdin, "%c", &ch);
putchar(ch)功能等價於printf("%c", ch);功能也等價於fputc(ch, stdout)功能也等價於發printf(stdout, "%c", ch);

發佈了42 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章