繁体   English   中英

fprintf() 是否适用于在管道中写入,或者我必须始终使用 write()?

[英]Does fprintf() work for writing in a pipe, or I must always use 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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM