fdopen

fdopen取一個現存的檔案描述符,並使一個標準的I / O流與該描述符相結合。此函式常用於由創建管道和網路通信通道函式獲得的描述符。因為這些特殊類型的檔案不能用標準I/O fopen函式打開,首先必須先調用設備專用函式以獲得一個檔案描述符,然後用fdopen使一個標準I/O流與該描述符相結合。

基本介紹

  • 中文名:fdopen
  • 適用領域範圍:計算機
  • 適用領域範圍:計算機
  • 相關函式:fopen,open
  • 表頭檔案:#include<stdio.h>
  • 定義函式:FILE * fdopen
fdopen函式,函式說明,

fdopen函式

相關函式:fopen,open,fclose
表頭檔案:#include<stdio.h>
定義函式:FILE * fdopen(int fildes,const char * mode);

函式說明

FILE* fdopen(int fd, const char* type);
fdopen取一個現存的檔案描述符(我們可能從 open,dup,dup2,fcntl,pipe,socket,socketpair或accept函式得到此檔案描述符) ,並使一個標準的I/O流與該描述符相結合。此函式常用於由創建管道和網路通信通道函式獲得的描述符。因為這些特殊類型的檔案不能用標準I/O fopen函式打開,首先必須先調用設備專用函式以獲得一個檔案描述符,然後用fdopen使一個標準I/O流與該描述符相結合。
fdopen()會將參數fildes 的檔案描述詞,轉換為對應的檔案指針後返回。參數mode 字元串
則代表著檔案指針的流形態,此形態必須和原先檔案描述詞讀寫模式相同。
mode有下列幾種形態字元串:
r 打開唯讀檔案,該檔案必須存在。
r+ 打開可讀寫的檔案,該檔案必須存在。
w 打開只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。
w+ 打開可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
a 以附加的方式打開只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的數據會被加到檔案尾,即檔案原先的內容會被保留。
a+ 以附加方式打開可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的數據會被加到檔案尾後,即檔案原先的內容會被保留。
對於fdopen,type參數的意義則稍有區別。因為該描述符已被打開,所以 fdopen為寫而打開並不截斷該檔案。(例如,若該描述符原來是由 o p e n函式打開的,該檔案那時已經存在,則其O_TRUNC標誌將決定是否截斷該檔案。fdopen函式不能截短它為寫而打開的任一檔案。 )另外,標準I/O添加方式也不能用於創建該檔案(因為如若一個描述符引用一個檔案,則該檔案一定已經存在)。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函式館打開的檔案為二進制檔案,而非純文字檔案。不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新檔案會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此檔案許可權也會參考umask值。
返回值:轉換成功時返回指向該流的檔案指針。失敗則返回NULL,並把錯誤代碼存在errno中。
範例:#include<stdio.h>
main()
{
FILE * fp =fdopen(1,”w+”);
fprintf(fp,”%s\n”,”hello!”);
fclose(fp);
}
執行:hello!

相關詞條

熱門詞條

聯絡我們