【发布时间】:2016-10-02 22:42:03
【问题描述】:
我正在尝试将一个可执行文件生成的输出作为输入传递给另一个。我已经能够一次发送一行。
问题是当我尝试从 Program1 发送“在 while 循环中生成的行序列”以供 Program2 作为输入读取时。我尝试在终端 (如下所示) 中通过管道传输可执行文件,但它无法正常工作。
./Program1 | ./Program2
./Program1 |xargs ./Program2
./Program1 > ./Program2
我想避免文件 I/O。
注意: 平台:Linux
===================
类似于以下示例的内容
Program1(写入终端)
int main(int argc, char *argv[])
{
int i = 2200;
while(1){
printf("%d \n", i);
i++;
}
}
Program2(从终端读取,Program1 的输出)
int main(int argc, char *argv[])
{
while(1){
// Read 'i' values
cout << "There are " << argc << " arguments:" << endl;
// Loop through each argument and print its number and value
for (int nArg=0; nArg < argc; nArg++)
cout << nArg << " " << argv[nArg] << endl;
}
return 0;
}
【问题讨论】:
-
您不能将连续流作为一组参数“传递”给另一个进程,因为必须在进程创建之前知道参数列表
-
我在从终端读取的第二个程序中什么也看不到。
-
另外,您使用的最后一个表单只是用
./Program1生成的输出覆盖了./Program2的内容 -
当你在 shell 中“管道”两个程序时,第一个程序的标准输出 (
stdout) 将被重定向到第二个程序的标准输入 (stdin) 而不是命令行参数。所以在你的情况下你只需要做 ``` int i ; while (true) { cin>> i; cout
标签: c++ command-line-interface piping