使用带输入,输出和重定向的execvp

时间:2014-04-27 10:33:38

标签: c unix redirect exec

在C程序中,假设我想使用Exec函数执行给定程序,例如,如果我想尝试ls -l我会做类似的事情

args[0]="ls";
args[1]="-l";
args[2]=NULL;

...
execvp("ls", args); 

一切都很好。现在如果我还要将重定向添加到文件(或stderr)怎么办? 我被卡住了,显然在数组中添加> log.txt作为第三个条目是行不通的,但我不知道如何继续。

而且,如果我想传递一些输入参数怎么办?如果我想执行GCC命令,例如“gcc -o out in redirection> log.txt”,该怎么办?

[评论更新:]

这是一个C程序,它模拟可以“运行字符串”的shell,包含命令的字符串,列表o参数,输入和重定向。

2 个答案:

答案 0 :(得分:1)

只需设置文件描述符,因为exec - d进程应找到它们然后执行exec。
为此,您需要opendup2close

exec - 系列中的所有功能只是用您说的任何内容替换当前进程。

答案 1 :(得分:0)

在shell中运行命令:

char * args[] = {
  "sh",
  "-c",
  "ls -l >out.ls 2>err.ls <in.ls",
  NULL
};

...

execvp(args[0], args); 
perror("execvp() failed");