2012-10-30 56 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_,这意味着可能发生任何事情:它可能工作;它可能不工作;或者它可能会崩溃。 –