execle 예제

execle() 및 execvpe() 함수를 사용하면 호출자가 인수 envp를 통해 실행된 프로그램의 환경을 지정할 수 있습니다. envp 인수는 null-종단 문자열에 대한 포인터 의 배열이며 NULL 포인터로 종료되어야 합니다. 다른 함수는 호출 프로세스의 외부 변수 환경으로부터 새 프로세스 이미지에 대한 환경을 가져옵니다. execle()가 성공하면 반환되지 않습니다. 그렇지 않으면 -1을 반환하고 errno를 설정합니다. C에서 execvp() 함수를 사용하는 방법을 보여 줄 작은 예제를 살펴보겠습니다. 우리는 두 가지를해야합니다. C 파일 , EXEC.c 및 execDemo.c 우리는 execDemo.c에서 execvp() 함수를 호출하여 execDemo.c로 execDemo.c를 대체합니다. 함수의 exec 제품군은 현재 실행 중인 프로세스를 새 프로세스로 대체합니다. 다른 C 프로그램을 사용하여 C 프로그램을 실행하는 데 사용할 수 있습니다.

그것은 헤더 파일 unistd.h 아래에 온다. exec 가족에는 예와 함께 아래에 표시된 많은 구성원이 있습니다. int execl (const char *path, const char *arg, …); int execlp (const char *파일, const char *arg, …); int execle (const char *path, const char *arg, …, char * const envp[]); int execv (const char *path, char *const argv[]); int execvp(const char *파일, char *const argv[]); int execvpe (const char *파일, char *const argv[], char *const envp[]); 다음 예제에서는 실행 할 수 있는 경로 이름을 지정 하는 ls 명령을 실행 (/bin/ls) 단일 열 출력을 생산 하기 위해 명령에 직접 제공 하는 인수를 사용 하 여. 다음 예제에서는 PATH 환경 변수에 의해 지정 된 디렉터리 중 ls 명령의 위치를 검색 하 고 cmd 배열에서 ls 명령에 인수를 전달 합니다. ISO C 표준과 POSIX.1-2017의 이 볼륨은 환경의 사용에 충돌하지 않지만 환경의 일부 역사적 구현은 충돌을 일으킬 수 있습니다. 환경이 진입점(예: fork())과 동일한 방식으로 처리되는 한 두 표준을 모두 준수합니다. 라이브러리에는 fork()가 포함될 수 있지만 사용자가 제공한 fork()가 있는 경우 해당 fork()가 우선적으로 지정되고 문제가 계속되지 않습니다. 상황은 환경과 유사합니다: POSIX.1-2017의 이 볼륨에 있는 정의는 사용자가 제공하는 환경이 우선하지 않는 경우에 사용됩니다. 이 문제를 해결하는 구현이 세 개 이상 있는 것으로 알려져 있습니다.

엄격하게 준수하는 POSIX 응용 프로그램에 대한 요구 사항은 첫 번째 인수로 전달된 값이 시작되는 프로세스와 연결된 파일 이름 문자열임을 명시합니다. 일부 기존 응용 프로그램은 경우에 따라 파일 이름 문자열이 아닌 pathname을 전달하지만 argv[0]의 일반적인 사용법은 인쇄 진단에 있기 때문에 파일 이름 문자열이 더 일반적으로 유용합니다. 경우에 따라 전달된 파일 이름이 파일의 실제 파일 이름이 아닙니다. 예를 들어, 로그인 유틸리티의 많은 구현에서는 실제 파일 이름에 (`-`)을 접두사하는 규칙을 사용하며, 이는 명령 인터프리터가 호출되는 명령 인터프리터가 “로그인 셸”임을 나타냅니다. execle()에 전달된 마지막 인수는 실행된 프로그램이 볼 환경 변수를 설명하는 C 문자열을 포함하는 char 포인터의 배열입니다. 다음은 예제입니다. #include 외래 char **environ; int execl (const char *path, const char *arg0, … /*, (char *)0 */); int execle (const char * path, const char *arg0, … /* /); int execv (const char *path, char *const argv[]); int execve(const char *path, char *const argv[], char *const envp[]; int execvp(const char *파일, char *const argv[]); int fexecve (int fd, char *const argv[], char *const envp[]; execl, execlp, execcle, execvpe- 파일을 실행하면 흔한 역사적 구현은 execl(), execv(), execle(), execle(및 execve() 함수가 쉘 스크립트를 포함하여 실행 파일로 인식할 수 없는 파일에 대해 [ENOEXEC] 오류를 반환한다는 것입니다.

Posted in Uncategorized