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