2015-10-18 106 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完成