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

时间:2011-12-21 12:39:17

标签: c++ stdout pipe stdin popen

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

之类的东西

我想在stdin上写...并获得输出...类似于 tar -zcvf - / path | tar - zxvf -

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

我想做这个管道过程..

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

我想要这个,因为我可以在不需要磁盘的情况下发送套接字数据并在另一端提取,我实时压缩和解压缩。

有人可以帮助我吗?

我看到我需要做一个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

2 个答案:

答案 0 :(得分:5)

您无法使用popen; popen始终是单向的。您 可以直接使用pipefork来设置这些内容 (但它比popen更多的工作。但是,如果你这样做,你就拥有了 要非常非常小心。管道只能容纳有限数量的数据。 尝试写更多,写入等待空间可用。所以 您可以轻松地在子进程等待的情况下结束 你可以在输出管道上读取一些东西,以便创造更多 管道中的空间,您的进程正在等待孩子阅读 什么东西,以便教皇将有更多的空间。我做到了这一点 过去一次,但sort是其中一个项目 循环 - 你保证sort不会尝试写任何东西 直到它在输入上看到文件结束。

答案 1 :(得分:1)

std::cinstd::cout是您的朋友。