问题描述
请记住,在使用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");