-
fdopen
鎖定
- 中文名
- fdopen
- 適用領域
- 計算機
- 相關函數
- fopen,open
- 表頭文件
- #include
- 定義函數
- FILE * fdopen
fdopen函數
表頭文件:#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流與該描述符相結合。
則代表着文件指針的流形態,此形態必須和原先文件描述詞讀寫模式相同。
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值。
範例:#include<stdio.h>
main()
{
FILE * fp =fdopen(1,”w+”);
fprintf(fp,”%s\n”,”hello!”);
fclose(fp);
}
執行:hello!