2015-10-18 75 views
1

如何解决这个问题,为什么会发生?使用execvp来实现查找命令

char *command[]={"find","-executable","print",">","filename.txt",NULL} 
execvp("find",command); 

发现:路径必须先表达:>

回答

0

你不能获得重定向这样...当你在一个shell中键入find ... > file.txt>file.txt不是find命令的参数。 shell会解释您输入的所有内容,并从您的命令行中提取重定向,并在保留之前进行重定向。

重定向可以通过dupexec之前获得一些文件描述符。

if (fork()==0) { 
    f = open("file.txt",...); 
    dup2(1,f); // redirects stdout to f... 
    close(f); 
    exec(...); // open files remains open on exec (by default). 
} 
:一般情况下,这是后 fork ING之前 exec ING完成