2012-10-30 54 views
-1

我一直在試圖運行如下使用exevp命令:無法運行execv

char *args[11]; 
args[0] = (char*)lgulppath.c_str(); 
args[1] = (char*)"-i"; 
args[2] = (char*)sniffer_interface.c_str(); 
args[3] = (char*)"-r"; 
args[4] = (char*)pcapfileLimit.c_str(); 
args[5] = (char*)"-C"; 
args[6] = (char*)"1"; 
args[7] = (char*)"-f"; 
args[8] = (char*)serverip_filter.c_str(); 
args[9] = (char*)"-o"; 
args[10] = (char*)lpipepath.c_str(); 
execv("/usr/sbin/program",args); 

這個工程。然而,當我想擁有的第一個參數「/ usr/sbin目錄/程序」作爲參數,說:

string str = "/usr/sbin/program"; 
//char* args is assigned as above 
execv(str.c_str(),args); 

這種失敗並返回-1。我無法理解爲什麼。

謝謝大家

+1

什麼是errno? – Jasper

+0

首先,傳遞給'execv'的參數數組應該由一個指向NULL的條目終止。其次,當你得到一個錯誤,你可以檢查['errno'](http://en.cppreference.com/w/cpp/error/errno)的理由(使用['strerror']](http:// en .cppreference.com/w/cpp/string/byte/strerror)或['perror'](http://en.cppreference.com/w/cpp/io/c/perror)來獲取/打印可讀的描述) 。 –

+1

您似乎無法在args數組的末尾放置NULL。這可能會導致各種各樣的麻煩 - 可能會或可能不會成爲您的特殊問題,但最好先解決。 –

回答

3

Null終止您傳遞給execv的參數。類似於

char *args[12]; 
// other args.. 
args[11] = (char*) 0; 
+0

@ Duck ..我不認爲問題是args ..畢竟它會在第一次嘗試失敗..以及? –

+0

@ user1432779未正確終止參數數組將導致_undefined behavior_,這意味着可能發生任何事情:它可能工作;它可能不工作;或者它可能會崩潰。 –