更新时间:2024-05-28 11:50
fdopen取一个现存的文件描述符,并使一个标准的I / O流与该描述符相结合。此函数常用于由创建管道和网络通信通道函数获得的描述符。因为这些特殊类型的文件不能用标准I/O fopen函数打开,首先必须先调用设备专用函数以获得一个文件描述符,然后用fdopen使一个标准I/O流与该描述符相结合。
表头文件:#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流与该描述符相结合。
则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。
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!