1. 程式人生 > >C語言-文件操作

C語言-文件操作

不常用 inux div 失敗 ungetc 大量 發送 size_t 回車

總結一下今天下午學習的內容:

13.1

文件通常是硬盤或固態硬盤上的一段已命名儲存區,在使用C語言與文件進行交互時,有“文本模式”和“二進制模式”兩種。對於UNIX和Linux來說這兩種模式沒有任何區別,但對於其他系統來說,在儲存區域的劃分上有所不同。

I/O(輸入輸出)可以選擇兩個標準,一個是操作系統攜帶的底層I/O,一個是C程序攜帶的標準I/O包,後者具有可移植性。

每一個C程序都會自動打開三個文件,標準輸入、標準輸出和標準錯誤輸出,其中第三個會將錯誤信息發送到顯示屏上,是一種標準的寫法。

對於標準I/O除了攜帶大量的文件操作函數可供使用外,還有一個優勢就是“輸入和輸出都是緩沖的”。

13.2

exit將控制權交給操作系統,return將控制權交給上一級(即退出函數),除了在遞歸型主函數中以外,exit和return的效果是一樣的;

疑惑:書上說UNIX和Lniux只有一種文件類型,但查到的信息不是這樣……

fopen打開文件時,有多種模式,其中追加符‘+‘表示擴展權限,‘x‘表示“安全模式”(我自己命名的),‘b‘表示二進制。

fp所指向的是一個數據對象。

文件的輸入輸出函數中使用stdout進行標準輸入輸出。

如果getc()讀到了文件結尾,將返回EOF

scanf/printf與fscanf/fprintf之間的區分是根據和內存之間的關系而來的。

如果磁盤已滿、移動磁盤或者出現I/O錯誤,都會導致fclose()函數失敗;

標準的打開文件方式:

if((in = fopen(name,"w")) == NULL)
{
    fprintf(stderr, 
"Can‘t creat output file.\n"); exit(EXIT_FALLURE); }

其中的exit(EXIT_FALLURE)表示退出程序,並關閉所有文件;

13.3

同時操作文件數是有限制的,範圍一般是10-20。

在編寫程序的時候,經常使用類似#define MAX 41的代碼來定義常量,目的是為了日後的修改方便。

空字符(字符串的終止標誌)與空格字符不一樣。

回車符和換行符不一樣,在windows下輸入大鍵盤中的回車鍵,將輸入回車‘\r’和換行‘\n‘。

gets()函數涉及到越界問題,在正式的程序編輯中最好不要出現,可以使用fgets()代替它,但因為fgets在處理換行符時與gets的差異問題,在CPP中使用了一個自編寫的s_gets(),而C11中自帶一個可擴展的get_s(),具體的使用就要涉及到編譯器的選擇了……經過一番調查,還是要上手VS,使用Clang進行編譯。

13.5

每次函數對文件指針進行操作之後,移動的是文件指針指向的文件結構數據體中的某個指針。

fseek()和ftell()用來移動和操作文件指針。

fgetpos()和fsetpos()是對大型文件進行操作的函數。

13.7

在這裏記錄一些文件操作函數,不常用,但放這裏給自己提個醒兒……

ungetc——將執行字符放回輸入流

fflush——更新流

setvbuf——創建一個供標準I/O函數替換使用的緩沖區。

fread和fwrite在二進制下對數據進行操作,參數需要註意一下,考試時比較有用:

size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);

這個還挺方便的……

feof——當上一次輸入調用時檢測到文件結尾時返回一個非零值(等會兒找個程序試一下)

ferror——當讀或寫出現錯誤,ferror返回一個非零值,否則返回0。

以上。

C語言-文件操作