我们应该何时使用fdopen以及如何使用它?我的理解是,当我们无法使用fopen读取(从管道读取)时。我不太了解手册页The fdopen() function associates a stream with the existing file descriptor, fd
上对fdopen的描述。
具有某种文件描述符(fdopen()
)时使用fdopen()
,但您需要调用需要文件流(int fd;
)的函数。这可以是管道文件描述符,套接字文件描述符或任何其他文件描述符类型。
一旦使用FILE *fp;
,您应该不再使用文件描述符-您应该仅使用文件流。如果还必须使用文件描述符,则最好使用fdopen()
而不是保存的fileno(fp)
。最重要的是,如果混合使用访问权限,则在使用文件描述符执行任何操作之前,需要确保已刷新文件流。 (文件描述符没有缓冲,因此从文件描述符还原到文件流的问题较少。)在文件描述符上进行文件定位操作可能会使文件流混乱,反之亦然。
您必须使用fd
关闭文件流(并隐式地关闭文件描述符)。不要仅使用fclose(fp);
或close(fd)
。
请注意,POSIX定义close(fileno(fp))
将格式化输出输出到文件描述符。另外,您可以使用dprintf()
或其亲戚将数据格式化为字符串,然后将该字符串写入文件描述符。这可能会降低使用dprintf()
的重要性。