2012-10-30 1 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_가 발생합니다. 이는 아무 일도 발생할 수 없음을 의미합니다. 작동하지 않을 수도 있습니다. 아니면 추락 할 수도 있습니다. –

관련 문제