C中的POSIX fdopen()函数

问题描述 投票:0回答:1

我们应该何时使用fdopen以及如何使用它?我的理解是,当我们无法使用fopen读取(从管道读取)时。我不太了解手册页The fdopen() function associates a stream with the existing file descriptor, fd上对fdopen的描述。

c linux posix
1个回答
0
投票

具有某种文件描述符(fdopen())时使用fdopen(),但您需要调用需要文件流(int fd;)的函数。这可以是管​​道文件描述符,套接字文件描述符或任何其他文件描述符类型。

一旦使用FILE *fp;,您应该不再使用文件描述符-您应该仅使用文件流。如果还必须使用文件描述符,则最好使用fdopen()而不是保存的fileno(fp)。最重要的是,如果混合使用访问权限,则在使用文件描述符执行任何操作之前,需要确保已刷新文件流。 (文件描述符没有缓冲,因此从文件描述符还原到文件流的问题较少。)在文件描述符上进行文件定位操作可能会使文件流混乱,反之亦然。

您必须使用fd关闭文件流(并隐式地关闭文件描述符)。不要仅使用fclose(fp);close(fd)

请注意,POSIX定义close(fileno(fp))将格式化输出输出到文件描述符。另外,您可以使用dprintf()或其亲戚将数据格式化为字符串,然后将该字符串写入文件描述符。这可能会降低使用dprintf()的重要性。

© www.soinside.com 2019 - 2024. All rights reserved.