如何解决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");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。