標準I O庫之定位流

2022-05-04 20:24:09 字數 1599 閱讀 5305

有三種方法定位標準i/o流。

(1)ftell和fseek函式。這兩個函式自v7以來就存在了,但是它們都假定檔案的位置可以存放在乙個長整型中。

(2)ftello和fseeko函式。single unix specification引入了這兩個函式,可以使檔案偏移量不必一定使用長整型。它們使用off_t資料型別代替了長整型。

(3)fgetpos和fsetpos函式。這兩個函式是由iso c引入的。它們使用乙個抽象資料型別fpos_t記錄檔案的位置。這種資料型別可以定義為記錄乙個檔案位置所需的長度。

需要移植到非unix系統上執行的應用程式應當使用fgetpos和fsetpos。

#include long ftell( file *fp );

返回值:若成功則返回當前檔案位置指示,若出錯則返回-1l

int fseek( file *fp, long offset, int

whence );

返回值:若成功則返回0, 若出錯則返回非0值

void rewind( file *fp );

對於乙個二進位制檔案,其檔案位置指示器是從檔案起始位置開始度量,並以位元組為計量單位。ftell用於二進位制檔案時,其返回值就是這種位元組位置。為了用fseek定位乙個二進位制檔案,必須指定乙個位元組offset,以及解釋這種偏移量的方式。whence的值與lseek函式的相同:seek_set表示從檔案的起始位置開始,seek_cur表示從當前檔案位置開始,seek_end表示從檔案的尾端開始。

對於文字檔案,它們的檔案當前位置可能不以簡單的位元組偏移量來度量。這主要也是在非unix系統中,它們可能以不同的格式存放文字檔案。為了定位乙個文字檔案,whence一定要是seek_set,而且offset只能有兩種值:0(繞回到檔案的起始位置),或是對該檔案呼叫ftell所返回的值。使用rewind函式也可以將乙個流設定到檔案的起始位置。

除了offset的型別是off_t而long以外,ftello函式與ftell相同,fseeko函式與fseek相同。

#include off_t ftello( file *fp );

返回值:若成功則返回當前檔案位置指示,若出錯則返回-1

int fseeko( file *fp, off_t offset, int

whence );

返回值:若成功則返回0,若出錯則返回非0值

fgetpos和fsetpos這兩個函式是c標準引進的。

#include int fgetpos( file *restrict fp, fpos_t *restrict pos );

int fsetpos( file *fp, const fpos_t *pos );

兩個函式返回值:若成功則返回0,若出錯則返回非0值

fgetpos函式將檔案位置指示器的當前值存入由pos指向的物件中。在以後呼叫fsetpos時,可以使用此值將流重新定位至該位置。

本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:

C 流之標準I O流

標準i o流是指對標準輸入裝置 鍵盤 滑鼠等 和標準輸出裝置 顯示器 印表機等 進行輸入輸出的過程。在根基類ios類中定義了3個使用者會經常使用的列舉型別,由於他們是在公用成員部分定義的,所以其中的每個列舉型別常量在加上ios 字首後都可以為本類成員函式和所有外部函式訪問。enum 以下是上述列舉常...

標準IO庫 開啟流

開啟標準io流函式 include file fopen const char pathname,const char type file freopen const char pathname,const char type,file file fdopen int filedes,const c...

C 流與標準IO庫

流 資料在計算機裝置和記憶體之間移動,其基本單位為字元,故將其形象地稱為流。中把輸入輸出流定義為類,這裡的輸入 輸出是針對記憶體而言的。流類的物件稱為流物件。每個流物件在記憶體中有自己的緩衝區用於暫存資料。流物件不能複製或賦值,但可以將其引用或指向流物件的指標作為函式的引數或者返回值。第四版 中主要...