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