2017-02-14 58 views
0

我一直有問題得到execl的工作。無法使execl()工作

pid_t pid = fork(); 

if(pid<0) { 
perror("fork error\n"); 

} else if(pid== 0){ 
execl("/home/"user name"/opSys", "ps", ">>", "test.txt", (char*)NULL); 

} else { 

int returnStatus; 
waitpid(pid, &returnStatus, 0); 

} 

我試圖讓它運行命令,然後輸出到我的文本文件,但沒有任何反應。我一直在使用Google,並試圖找到我所找到的東西,比如不同的高管。我已經嘗試過execlp(),我試圖讓它使用ps ant並不把它放到一個文件中。

我很抱歉,如果這已被回答,我相信它,但是我無法找到一個解決方案,爲我工作。 在此先感謝。

+1

向我解釋這個'「/家/」用戶名「/ OPSYS」'。 –

+0

在帖子中拼寫錯誤,我解決了。 – lostknight

+3

'>>'是一個shell運算符。 'execl'不理解。它會將'>>'傳遞給'opSys'程序而不是shell。這不是你想要的。 – kaylum

回答

1

我假設您的命令中的>>應該創建輸出的重定向。但是,這並不是這種情況。當在命令行上給出時,運營商>>shell解釋;該命令僅獲取參數並排除它。然後,shell會注意文件描述符爲重定向而被正確地修改。

對於您的情況,該命令將獲得三個參數,即給定字符串ps,>>test.txt。這就好比打字

command ps '>>' test.txt 

您呼叫可能不會做很多然後命令,也許關於收到的錯誤參數(你可能錯過了)標準錯誤給出錯誤信息。

我建議你嘗試調用一個shell來幫你解釋你的命令,並通過你的命令字符串:

execl("/bin/sh", "-c", "/home/"user name"/opSys ps >> test.txt", 
    (char*)NULL); 
+0

順便說一句,我希望你的'user'和'name'是一些評估爲無空格的字符串的宏,否則這是另一個問題,你必須在路徑上放置單引號以逃避空格:'''/ home /「用戶名「/ opSys'ps >> test.txt」'。 – Alfe

+0

非常感謝Alfe,這解決了我的問題。我必須做execl(「/ bin/sh」,「sh」....);首先,但我的問題是固定的。 – lostknight