使用 popen 将缓冲区从我的程序传输到另一个程序的标准输入

pipe a buffer from my program to another program's stdin using popen

假设我有一个程序,在某种程度上运行另一个程序 使用 FILE *outptr=popen("some command string","r") 然后 fread() 是来自 outptr 的那个程序的标准输出。现在,如果那个其他程序 从它的标准输入读取它的输入,我想要 该输入来自磁盘上已有的文件 inputfile,那么我可以很容易地 只需写入 FILE *outptr=popen("cat inputfile|otherpgm","r");

但这就是问题所在:我的不是磁盘上的一些输入文件,而是 程序有一个内部 unsigned char buffer[9999] 这是 我想要通过管道传输到 otherpgm,但我不想写入的内容 先到磁盘。我怎样才能将 buffer[] 直接通过管道传输到 otherpgm 的标准输入 使用 popen()?或者其他一些机制,只要我能读懂 我程序中的其他 pgm 标准输出。

How can I get buffer[] piped directly to otherpgm's stdin using popen()?

这无法使用 popen 完成。

Or some other mechanism

您需要设置两个管道(参见 man pipe)——一个从您的程序到另一个程序,一个从其他程序到您的程序,然后 fork , 关闭子项和 exec 其他程序中管道的适当末端。

如果您需要写入或读取的数据超过PIPE_BUF,您还需要担心死锁。

Example code.

Relevant answer -- 如果您可以在磁盘上制作 FIFO,这会容易得多。

Another answer 有例子。