2011-03-05 6 views
3

다른 프로그램을 포크하는 프로그램이 있습니다. 내 프로그램에 대한 인수에는 인수와 함께 분기 될 프로세스의 프로세스 이름이 포함됩니다.가변 수의 인수로 exec를 호출합니까?

즉, exec()를 호출 할 때 많은 인수가 제공되지만 처리 할 수 ​​있어야합니다.

아이디어가 있으십니까?

감사합니다.

답변

5

execv 함수는 인수 배열에 대한 포인터를 사용합니다.

main과 마찬가지로 배열의 마지막 요소는 null 포인터 여야합니다.

+0

아, 완벽합니다. 그 일을 멋지고 쉽게 만듭니다. – Blackbinary

+0

@Blackbinary 그리고 main과 마찬가지로 배열의 첫 번째 (또는 0 번째) 요소는 일반적으로 프로그램 이름입니다 (실행 파일의 이름 인 execv의 첫 번째 인수와 같을 필요는 없습니다). –

1

또는 execl()은 가변 개수의 인수를 취하며 목록 끝에 NULL 포인터가 있습니다. 당신은 아마 execv()을 사용해야 할 것이지만 훨씬 더 깨끗합니다. C의 varargs는 추악한 해킹으로 만 간주 될 수 있습니다. (잠시 후, /usr/include/varargs.h이 가리키는 파일을보십시오!).

+1

varargs의 문제점은 누군가가 못생긴 해킹이라고 여기는 것이 아니라 varargs 함수에 대한 인수가 컴파일시 알려 져야하기 때문에 "많은 인수가 제공되지만 처리 할"수는 없다는 것입니다 시각. P. varargs.h는 더 이상 사용되지 않으며 C 표준의 일부가 아닙니다. stdarg.h는 올바른 헤더입니다. –

관련 문제