一.fileno()函式
功 能:把檔案流指標轉換成檔案描述符
相關函式:open, fopen
表標頭檔案:#include <stdio.h>
定義函式:int fileno(FILE *stream)
函式說明:fileno()用來取得引數stream指定的檔案流所使用的檔案描述詞
返回值 :返回和stream檔案流對應的檔案描述符。如果失敗,返回-1。
範例:
#include <stdio.h>
main()
{
FILE *fp;
int fd;
fp = fopen("/etc/passwd", "r");
fd = fileno(fp);
printf("fd = %d\n", fd);
fclose(fp);
}
檔案描述詞是Linux程式設計中的一個術語。當一個檔案開啟後,系統會分配一部分資源來儲存該檔案的資訊,以後對檔案的操作就可以直接引用該部分資源了。檔案描述詞可以認為是該部分資源的一個索引,在開啟檔案時返回。在使用fcntl函式對檔案的一些屬性進行設定時就需要一個檔案描述詞引數。
以前知道,當程式執行時,就已經有三個檔案流開啟了,它們分別是標準輸入stdin,標準輸出stdout和標準錯誤輸出stderr。和流式檔案相對應的是,也有三個檔案描述符被預先開啟,它們分別是0,1,2,代表標準輸入、標準輸出和標準錯誤輸出。
需要指出的是,上面的流式檔案輸入、輸出和檔案描述符的輸入輸出方式不能混用,否則會造成混亂。
函式功能:改變檔案大小
相關函式:open、truncate
表標頭檔案:#include <unistd.h>
函式原型: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<length時,此時如果使用十六進位制編輯工具開啟該檔案,你會發現檔案末尾多了很多00,這就是執行這個函式後的效果。如果發生系統復位或者裝置掉電以後,該函式所產生的作用將被檔案系統忽略,也就是說它所分配的空間將不能被識別,檔案的大小將會是最後一次寫入操作的區域大小,而非ftruncate分配的空間大小,也就是說,檔案大小有可能會被改變。
解決方法:可以在執行完ftruncate之後,在新空間的末尾寫入一個或以上位元組的資料(不為Ox00),這樣新空間則不為空,檔案系統會把這部分空間當成這個檔案的私有空間處理,而不會出現檔案大小改變的錯誤。
相關文章
- 對stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的學習
- 標準輸入輸出服從規則和fileno,freopen,fdopen,ftell,fseek,rewind幾個函式函式
- 函式一函式
- PHP 每日一函式 — 字串函式 crypt ()PHP函式字串
- PHP 每日一函式 — 字串函式 chr ()PHP函式字串
- MySQL函式學習(一)-----字串函式MySql函式字串
- MySQL函式(一)MySql函式
- PHP 每日一函式 — 字串函式 addcslashes ()PHP函式字串
- PHP 每日一函式 — 字串函式 addslashes ()PHP函式字串
- python函式每日一講 - int()函式Python函式
- python函式每日一講 - int()函式Python函式
- python函式每日一講 - eval函式Python函式
- python函式每日一講 - id函式Python函式
- python函式每日一講 - dir()函式Python函式
- Sql Server函式全解(一)字串函式SQLServer函式字串
- vue在一個函式中呼叫另外一個函式Vue函式
- PHP 每日一函式 — 字串函式 count_chars ()PHP函式字串
- PHP 每日一函式 — 字串函式 crc32 ()PHP函式字串
- PHP 每日一函式 — 字串函式 chunk_split ()PHP函式字串
- 陣列排序函式-php陣列函式(一)陣列排序函式PHP
- python函式每日一講 - enumerate函式Python函式
- ORACLE單行函式與多行函式之一Oracle函式
- split() 函式解析 (一)函式
- oracle分析函式(一)Oracle函式
- 淺析一個函式呼叫另一個函式的變數函式變數
- js中在一個函式中引用另一個函式中的函式,可以這麼做JS函式
- PHP 每日一函式 — 字串函式 bin2hex ()PHP函式字串
- python函式每日一講 - exec執行函式Python函式
- 物件,函式作為一個函式的引數物件函式
- ORACLE函式介紹第一篇 著名函式之單值函式Oracle函式
- STDIN_FILENO與STDIN的區別
- 一圖秒懂函式防抖和函式節流函式
- 函式與極限 第一節 對映與函式函式
- python函式每日一講 - filter函式過濾序列Python函式Filter
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 一個函式學excel函式Excel
- 字串函式學習一字串函式
- 一什麼是函式?函式