codememo

execvp에 대한 argv 매개 변수가 일정하지 않은 이유는 무엇입니까?

tipmemo 2023. 10. 15. 17:23
반응형

execvp에 대한 argv 매개 변수가 일정하지 않은 이유는 무엇입니까?

execvp는 다음과 같이 정의됩니다.

int execvp(const char *file, char *const argv[]);

이것은 이와 같은 코드가 사용되는 것을 막습니다.

const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);

실수로 누락된 건가요?이 주위에 cont_cast를 해도 안전합니까?아니면 일부 execvp 구현이 실제로 그 메모리에 낙서를 하나요?

POSIX 사양에는 다음과 같이 나와 있습니다(http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html) :

argv[]그리고.envp[]포인터의 배열과 해당 배열이 가리키는 문자열은 프로세스 이미지를 교체한 결과를 제외하고는 실행 함수 중 하나에 대한 호출로 수정할 수 없습니다.

제 생각에 실종된 것 같습니다. const역사적인 특이점일 뿐입니다

저도 이와 같은 상황을 접했습니다.왜냐하면 execvp()는char *const두 번째 매개 변수로서, 이는 문자에 대한 일정한 포인터를 수용한다는 것을 의미합니다.따라서 포인터 차트를 전달하면 포인터 차트를 문자에 대한 일정한 포인터로 캐스트할 수 있습니다.그래서 선언하는 대신에

const char* argv[] = {"/bin/my", "command", "here", NULL};

해라

char* argv[] = {"/bin/my", "command", "here", NULL};

그리고 그것은 받아들일 것입니다.argv[]문제없이

언급URL : https://stackoverflow.com/questions/10456043/why-is-argv-parameter-to-execvp-not-const

반응형