fdopen

更新时间:2024-05-28 11:50

fdopen取一个现存文件描述符,并使一个标准的I / O流与该描述符相结合。此函数常用于由创建管道和网络通信通道函数获得的描述符。因为这些特殊类型的文件不能用标准I/O fopen函数打开,首先必须先调用设备专用函数以获得一个文件描述符,然后用fdopen使一个标准I/O流与该描述符相结合。

函数

相关函数:fopen,open,fclose

表头文件:#include

定义函数: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

main()

{

FILE * fp =fdopen(1,”w+”);

fprintf(fp,”%s ”,”hello!”);

fclose(fp);

}

执行:hello!

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}