C++在stdin上写入数据并从stdout获取输出

Lef*_*ler 3 c++ stdin stdout pipe popen

我有一个程序调用一个tar ..像popen("tar -zcvf")

我想在stdin上写...并获得输出......比如tar -zcvf - /path | tar - zxvf -

所以...一方面我将封装目录中的文件,然后通过stdout发送并写入反向过程..并发送到bash的stdout.

我想做这个管道工艺..

读取一个文件夹/文件并将stdin发送到"提取"内容并读取二进制输出.

我想要这个,因为我可以发送trought套接字数据并在另一边提取而不需要磁盘,我实时压缩和解压缩..

有人可以帮帮我吗?

我看到我需要做一个execl ...但我发现的所有例子都是将孩子的stdout重定向到我的.

我会做那样的事情:

LOOP.
1 Get block of data from stdin
2 Send to child program
3 get the output
4 Do something with the data (send back trough socket)
END_LOOP

OR
LOOP
1 Get block of data from stdin.
2 Send to child program.
END_LOOP
LOOP
1 Get block of data from child program
2 Do something with the data (send back trough socket)
END_LOOP
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 5

你不能用popen它; popen总是单向的.您可以使用pipefork直接设置这些行的内容(但它比工作更多popen).但是,如果你这样做,你必须非常非常小心.管道只能容纳有限数量的数据.尝试写更多,写入等待空间可用.因此,您可以轻松地在子进程等待您在其输出管道上读取内容的情况下结束,以便在管道中创建更多空间,并且您的进程正在等待子进程读取内容以便在教皇中有更多的空间.我过去曾经这样做了一次,但是它sort是循环中的一个程序 - 并且你保证sort在它的输入上看到文件结束之前不会尝试写任何东西.