使用 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
,您还需要担心死锁。
Relevant answer -- 如果您可以在磁盘上制作 FIFO,这会容易得多。
Another answer 有例子。
假设我有一个程序,在某种程度上运行另一个程序 使用 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
,您还需要担心死锁。
Relevant answer -- 如果您可以在磁盘上制作 FIFO,这会容易得多。
Another answer 有例子。