一.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>最後,定位允許你從寫入模式切換到讀取模式,或者回到打開的流以便更新。