我们什么时候应该使用fdopen,我们如何使用fdopen?我对此的理解是,我们不能用fopen来阅读(从管道中读取)。我不太明白手册页上对fdopen的描述:The fdopen() function associates a stream with the existing file descriptor, fd。
发布于 2020-05-10 07:04:21
当您有某种类型的文件描述符(int fd;)时,可以使用int fd;,但是您需要调用需要文件流(FILE *fp;)的函数。这可以是管道文件描述符、套接字文件描述符或任何其他文件描述符类型。
一旦使用了fdopen(),就不应该再次使用文件描述符--应该只使用文件流。如果您也必须使用文件描述符,最好使用fileno(fp)而不是保存的fd。最重要的是,如果混合访问,则需要确保在使用文件描述符进行任何操作之前已经刷新了文件流。(文件描述符没有缓冲,所以从文件描述符恢复到文件流没有什么问题。)更改文件描述符上当前文件位置的操作可能会破坏文件流,反之亦然(当存在与文件描述符或文件流关联的当前位置时)。请注意,读写操作都会改变当前的文件位置--在不冒乱七八糟的风险的情况下,没有什么可以做的。
您必须使用fclose(fp);关闭文件流(并隐式地关闭文件描述符)。不要只使用close(fd)或close(fileno(fp))。
注意,POSIX定义了dprintf()来对文件描述符执行格式化输出。此外,还可以使用snprintf()或其亲属将数据格式化为字符串,然后将字符串写入文件描述符。这可能会使使用fdopen()变得不那么重要。
https://stackoverflow.com/questions/61708092
复制相似问题