在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参数,输入和重定向。
答案 0 :(得分:1)
只需设置文件描述符,因为exec
- d进程应找到它们然后执行exec。
为此,您需要open
,dup2
和close
。
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");