fprintf是否可以在管道中写入,还是必须始终使用write?

问题描述

请记住,在使用fprintf()时,我知道需要传递文件描述符以写入管道。我只是有疑问,希望现在就知道。我真的没有任何示例代码

此外,我想知道fputc(),fputs()之类的函数是否也可以工作。

解决方法

使用fprintf()需要一个文件流(FILE *)。创建管道时,将获得两个文件描述符。文件描述符与流不同。

您可以使用POSIX fdopen()函数从文件描述符创建文件流。然后,您可以在该文件流上使用fprintf(),也可以使用其他任何带有显式文件流参数并写入该流的标准I / O函数。您不能使用fseek();您会收到一个错误消息(ESPIPE-非法搜索)。

(理论上)您可以使用POSIX dprintf()函数直接写入文件描述符-如果您的系统支持的话。

,

您可以使用fdopen()将文件描述符转换为FILE *,然后使用所有stdio函数。

int pipefd[2];
pipe(pipefd);

FILE *pipeout = fdopen(pipefd[1],"w");
fprintf(pipeout,"Message written to the pipe\n");