在windows API創建過程中我們有CreateProcess
函數。爲什麼同樣的作品在windows上並不適用於unix?
現在讓我們考慮我們想要創建進程並運行DIR /X
命令。當然,在Windows中不存在可執行文件DIR.exe
,我們不能將它傳遞給CreateProcess
。那麼該怎麼辦?
解決這個問題很簡單。我們只需要通過cmd /C "DIR /X"
(作爲第二個參數)到CreateProcess
。
現在讓我們嘗試在unix中執行相同的操作(不是DIR /X
,而是ls | wc
)。
在unix中,我將使用fork + execvp
來創建新進程並執行該命令。爲什麼我想要我的命令是ls | wc
,因爲在unix中,單個命令(如ls
,grep
,ps
)是可執行文件,可以單獨傳遞給exec(即不作爲參數sh
,bash
,...)。
因此,我們似乎可以通過"ls | wc"
作爲sh
的參數。 (即,我們可以標記sh -c "ls | wc"
並將它們傳遞給execvp
)。但是Oooops,這不起作用!
char *arg[] = {"sh", "-c", "\"ls | wc\"", NULL};
execvp(arg[0], arg);
所以問題。我該如何解決這個問題?
P.S. 在Windows中如果安裝了cygwin cmd /C "ls | wc"
的作品。
避免編輯您的問題,使現有的答案是這樣的錯誤。事實之後,它會造成一個令人困惑的閱讀。當然,不要編輯現有的答案來匹配修改後的問題。 – 2011-04-21 14:05:51