複製鏈接
請複製以下鏈接發送給好友

fdopen

鎖定
fdopen取一個現存文件描述符,並使一個標準的I / O流與該描述符相結合。此函數常用於由創建管道和網絡通信通道函數獲得的描述符。因為這些特殊類型的文件不能用標準I/O fopen函數打開,首先必須先調用設備專用函數以獲得一個文件描述符,然後用fdopen使一個標準I/O流與該描述符相結合。
中文名
fdopen
適用領域
計算機
相關函數
fopen,open
表頭文件
#include
定義函數
FILE * fdopen

目錄

fdopen函數

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

fdopen函數説明

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!