一个exec函数中的几个终端命令

时间:2013-04-10 17:57:02

标签: c++ unix ubuntu exec fork

出于好奇,我想知道执行两个或更多Linux命令的最简单方法是什么。我们来看下面的例子:

1) free > tmp1
2) uptime > tmp2
3) cat tmp1 tmp2 > result
4) rm tmp1 tmp2

我们如何在1号线的终端中实现相同目标:

free > tmp1 && uptime > tmp2 && cat tmp1 tmp2 > result && rm tmp1 tmp2

现在我试图在C ++中实现相同的目标(目标是在一个execlp中完成),例如:

pid_t child;
child = fork();
if ( child > 0 ) {
execlp("free", "free", ">", "tmp1", "&&", "uptime", "uptime", ">", "tmp2", "cat", "cat", "tmp1", "tmp2", ">", "result", "&&", "rm", "rm", "tmp1", "tmp2", NULL);
}

我想你得到的照片。不用说它不起作用,它只执行第一个命令然后死掉。无论如何。

是否真的有必要在分叉进程中创建单独的execlp行,然后在循环中“刷新”子进程?或者我们是否有替代方法在单个execlp行中执行相同操作?

如果可能的话,请举例说明我们如何取得同样的结果。

感谢。

1 个答案:

答案 0 :(得分:3)

您正在混淆“执行程序”和“在系统的命令解释程序中输入文本”。您的口译员知道如何处理">""&&",但他们不是可以执行的程序。

尝试使用system()

system("free > tmp1 && uptime > tmp2 && cat tmp1 tmp2 > result && rm tmp1 tmp2");