一.fflush
1.fflush的原型如下:
int fflush(FILE *stream);
2.當需要立即把輸出緩衝區的資料進行物理寫入時,應該使用這個函數。例如調用fflush函數保證調試資訊實際列印出來,而不是儲存在緩衝區中直到以後才列印。
二.定位函數
1.在正常情況下,資料以線性方式寫入,這意味著後面寫入的資料在檔案中的位置是在以前所有寫入資料的後面。C同時支援隨機訪問I/O,也就是以任意順序訪問檔案的不同位置。隨機訪問是通過在讀取或寫入前,先定位到檔案中需要的位置來實現的。
2.定位函數原型:
1>long ftell(FILE *stream);
2>int fseek(FILE *steam,long offset,int from);
3.ftell函數返迴流的當前位置。即:下一個讀取或寫入將要開始的位置距離檔案起始位置的位移量。該函數允許儲存一個檔案的當前位置。
1>在二進位流中,這個值就是當前位置距離檔案起始位置之間的位元組數。
2>在文字資料流中,這個值表示一個位置,但它並不一定準確地表示當前位置和檔案起始位置之間的字元數,因為有些系統將對行末字元進行翻譯轉換。但是,ftell函數返回的值總是可以用於fseek函數中,作為一個距離檔案起始位置的位移量。
4.fseek函數允許你一個流中定位。這個函數將改變下一個讀取或寫入操作的位置。它的第 1個參數是需要改變的流。它的第2和第3個參數標識檔案中需要定位的位置。
1>試圖定位到一個檔案的起始位置之前是一個錯誤。定位到檔案尾並進行寫入將擴充這個檔案。定位到檔案尾之後並進行讀取將導致返回一條“到達檔案尾”的資訊。
2>在二進位流中,從SEEK_END進行定位可能不被支援,所以應該避免。
3>在文字資料流中,如果from是SEEK_CUR或SEEK_END,offset必須是零。如果from是SEEK_SET,offset必須是一個從同一個流中以前調用ftell所返回的值。
5.用fseek改變一個流的位置會帶來三個副作用。
1>首先,行末指示字元被清除。
2>其次,如果在fseek之前使用ungetc把一個字元返回到流中,那麼這個被退回的字元會被丟棄,因為在定位操作以後,它不再是“下一個字元”。
3>最後,定位允許你從寫入模式切換到讀模數式,或者回到開啟的流以便更新。