문제

그래서 나는 기본적으로 UNIX에서 execv () 호출에 전달하려는 배열 당 1 인수가있는 벡터 args를 가지고 있습니다.

execv는 다음과 같은 두 매개 변수를 수락합니다 : int execv (const char *path, char *const argv []);

문자열 벡터를 다양한 포인터로 변환하는 가장 좋은 방법은 무엇입니까? 지금은 다음을 수행하고 있지만 PS -A -F, PS가 불법적 인 주장을 말하면서 소리를 지르고 있습니다. 모든 도움이 감사합니다.

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

.

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????
도움이 되었습니까?

해결책

나는 당신의 문제는 당신이 배열 끝에 널을 넣는 것을 소홀히하고 있다는 것일 수 있다고 생각합니다. 이 시도:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]

다른 팁

EXECV 함수는 새 프로그램에 사용할 수있는 인수 목록을 나타내는 널리 터진 문자열에 대한 다양한 포인터 배열을 제공합니다. 첫 번째 인수는 컨벤션에 의해 실행되는 파일과 관련된 파일 이름을 가리켜 야합니다. 포인터의 배열은 널 포인터에 의해 종료되어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top