fileno函式與ftruncate函式

2021-09-30 09:53:25 字數 1514 閱讀 8431

fileno()函式

功    能:把檔案流指標轉換成檔案描述符

相關函式:open, fopen

表頭檔案:#include

定義函式:int fileno(file *stream)

函式說明:fileno()用來取得引數stream指定的檔案流所使用的檔案描述詞

返回值  :返回和stream檔案流對應的檔案描述符。如果失敗,返回-1。

範例:#include

main()

檔案描述詞是linux程式設計中的乙個術語。當乙個檔案開啟後,系統會分配一部分資源來儲存該檔案的資訊,以後對檔案的操作就可以直接引用該部分資源了。檔案描述詞可以認為是該部分資源的乙個索引,在開啟檔案時返回。在使用fcntl函式對檔案的一些屬性進行設定時就需要乙個檔案描述詞引數。

以前知道,當程式執行時,就已經有三個檔案流開啟了,它們分別是標準輸入stdin,標準輸出stdout和標準錯誤輸出stderr。和流式檔案相對應的是,也有三個檔案描述符被預先開啟,它們分別是0,1,2,代表標準輸入、標準輸出和標準錯誤輸出。

需要指出的是,上面的流式檔案輸入、輸出和檔案描述符的輸入輸出方式不能混用,否則會造成混亂。

ftruncate()函式

函式功能:改變檔案大小

相關函式:open、truncate

表頭檔案:#include

函式原型:int ftruncate(int fd, off_t  length)

函式說明:ftruncate()會將引數fd指定的檔案大小改為引數length指定的大小。引數fd為已開啟的檔案描述詞,而且必須是以寫入模式開啟的檔案。如果原來的檔案件大小比引數length大,則超過的部分會被刪去

返 回  值:0、-1

錯誤原因:errno

ebadf     引數fd檔案描述詞為無效的或該檔案已關閉

einval    引數fd為一socket並非檔案,或是該檔案並非以寫入模式開啟

使用方法:fd一般可以fileno(file *fp)獲取,標示檔案當前的大小,length則可由使用者定義。此函式一般用在檔案初始化或者重新為檔案分配空間時。

注意事項:此函式並未實質性的向磁碟寫入資料,只是分配了一定的空間供當前檔案使用。當fd解決方法:可以在執行完ftruncate之後,在新空間的末尾寫入乙個或以上位元組的資料(不為ox00),這樣新空間則不為空,檔案系統會把這部分空間當成這個檔案的私有空間處理,而不會出現檔案大小改變的錯誤。

ftruncate函式在檔案清空方面作用很大

對乙個檔案用讀寫方式開啟 fopen("...", "r+");首先讀出檔案裡面的(9php.com)內容,處理完成後需要重新寫入檔案中。在重新寫入的(9php.com)時候需要先清空原來檔案裡面的(9php.com)內容,如何實現此處的(9php.com)清空?

原來使用先以讀方式開啟,讀入緩衝後關閉檔案,然後再以寫開啟,這樣做兩遍開啟關閉,太浪費時間。

用ftruncate可以清空檔案,如:ftruncate(fileno(fp), 0);

清空檔案後,需要使用rewind或fseek將檔案指標移到檔案頭。

函式指標 與 函式

c primer 7.10函式指標 241頁 通常,要宣告指向特定型別的函式的指標,可以首先編寫這種函式的原型,然後用 pf 替換函式名。這樣pf就是這類函式的指標。如 double pam int double pf int 用指標來呼叫被指向的函式。線索來自指標宣告。pf 扮演的角色與函式名相同...

類函式與函式

類函式,可以記錄某些東西,可以作為物件進行返回。而函式無法記錄。類函式很神奇,是類的同時,也可以當函式使用,其好處在於可以記錄某些東西,方便呼叫 而函式不能用於呼叫。因此這就是類函式的好處。map的用法,鍵值對。multimap不支援按鍵值操作,map是支援的。expilcit關鍵字的主要作用是用來...

函式與建構函式

建立乙個物件的方式中有乙個建構函式模式。ecmascript中的建構函式是用於建立特定型別物件的。如object和array這樣的原生建構函式,執行時可以直接在執行環境中使用。還可以自定義建構函式,以函式的形式為自己的物件型別定義屬性和方法 如乙個建構函式 function student name...