반응형
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
반응형
'codememo' 카테고리의 다른 글
| node.js가 충돌하지 않도록 하려면 어떻게 해야 합니까? try-catch가 작동하지 않습니다. (0) | 2023.10.15 |
|---|---|
| 우커머스 추가 관련 상품 및 상품 목록에 카트 버튼 추가 (0) | 2023.10.15 |
| WSAGetLastError()에서 오류 문자열을 검색하려면 어떻게 합니까? (0) | 2023.10.15 |
| 테이블 셀(td)에서 해당 테이블 헤더(th)를 가져오려면 어떻게 해야 합니까? (0) | 2023.10.15 |
| MySQL IN 절: 최대 인수 수 (0) | 2023.10.15 |