如何使用 write() 或 fwrite() 将数据写入终端(stdout)?

sma*_*jli 5 c pipeline

我正在尝试加快我的 C 程序的速度,以便更快地输出数据。
目前我正在用来printf()向外界提供一些数据。它是连续的数据流,因此我无法使用 return(data)。

我如何使用write()fwrite()将数据提供给console而不是文件?

总的来说,我的设置由用 C 编写的程序组成,其输出发送到 python 脚本,在其中进一步处理数据。我形成一个管道:

./program_in_c | script_in_python
Run Code Online (Sandbox Code Playgroud)

通过使用更多处理器核心,这为 Raspberry Pi 带来了额外的好处。

nor*_*nor 4

#include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)

write()从 buf 开始的缓冲区写入 count 个字节到文件描述符 fd 引用的文件。

标准输出文件描述符是:至少在linux中是1!在调用 write 系统调用之前,也要注意使用刷新 stdoutput 缓冲区,以确保清除所有以前的垃圾

fflush(stdout); // Will now print everything in the stdout buffer
write(1, buf, count);
Run Code Online (Sandbox Code Playgroud)

使用fwrite

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Run Code Online (Sandbox Code Playgroud)

函数 fwrite() 将 nmemb 数据项(每个大小字节长)写入到 Stream 指向的流中,并从 ptr 给定的位置获取它们。

fflush(stdout);
int buf[8];
fwrite(buf, sizeof(int), sizeof(buf), stdout);
Run Code Online (Sandbox Code Playgroud)

请参阅以下链接中的手册页以进一步阅读:

写入

  • 调用“write”然后调用“fflush(stdout)”是错误的方法。`write` 总是立即写入,无需缓冲。而 stdout 并不知道这一点。因此,您可能想在调用“write”之前写入缓冲区中的任何内容(通过调用 fflush),*如果*您也一直在使用 stdout。 (2认同)
  • 恐怕 `write()` 与 `fflush() 无关。你的答案根本不正确。 (2认同)