execl 예제

execl, execlp, execle, execv, execvp, execvpe -이 예에서 파일을 실행, myprog는 현재 작업 디렉토리에 존재하는 경우 발견될 것이다. execle() 및 execve()를 제외하고 이러한 함수는 환경이 수정되지 않는 한 MT-안전입니다. 이러한 함수를 호출할 때 환경이 수정되는 경우 동작은 지정되지 않습니다. execle() 및 execve()는 비동기 신호로 안전합니다. 파일을 실행하려고 시도하는 동안 오류가 발생할 때 execlp() 및 execvp()의 동작은 역사적인 관행이지만 전통적으로 문서화되지 않았으며 POSIX 표준에 의해 지정되지 않았습니다. ETXTBSY가 발생하면 BSD(및 기타 시스템)가 자동 절전 모드로 재시도합니다. 리눅스는 하드 오류로 처리하고 즉시 반환합니다. execlpe(), execvpe(): PTC MKS 툴킷 UNIX API 확장. 함수의 exec 제품군은 현재 실행 중인 프로세스를 새 프로세스로 대체합니다. 다른 C 프로그램을 사용하여 C 프로그램을 실행하는 데 사용할 수 있습니다. 그것은 헤더 파일 unistd.h 아래에 온다.

exec 가족에는 예와 함께 아래에 표시된 많은 구성원이 있습니다. 위에 표시된 동일한 C 프로그램은 execlp() 또는 execl() 함수로 실행할 수 있으며 현재 프로세스를 새 프로세스로 대체하는 것과 동일한 작업을 수행합니다. 일반적으로 함수 execlp() 및 execvp()는 위에서 설명한 오류와 ENOMEM 및 E2BIG을 제외한 모든 오류를 무시했습니다. 위에서 설명한 것 이외의 오류가 발생하면 반환됩니다. C에서 execvp() 함수를 사용하는 방법을 보여 줄 작은 예제를 살펴보겠습니다. 우리는 두 가지를해야합니다. C 파일 , EXEC.c 및 execDemo.c 우리는 execDemo.c에서 execvp() 함수를 호출하여 execDemo.c로 execDemo.c를 대체합니다. execl(), execle(), execlp(), execv(), execve(), execvp(), execvp(): UNIX 98, 예외. 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[]); int execl (const char *path, const char *arg0, …, const char *argn, (char *)0); . 우선 순위는 UNIX 시스템과 동일한 방식으로 새 스레드에 의해 상속됩니다. 네이티브 Win32 프로세스에서 만든 첫 번째 스레드도 이러한 방식으로 우선 순위를 상속합니다.

그러나 NuTCRACKER 플랫폼을 제어하지 않는 스레드를 추가로 만들면 THREAD_PRIORITY_NORMAL로 되돌릴 수 있습니다. 이러한 모든 함수는 실패하고 execve (2)에 지정된 오류에 대해 errno를 설정할 수 있습니다. . . . 경로 또는 파일 의 길이(또는 파일에 접두매된 $PATH 요소)가 PATH_MAX를 초과하거나 경로 이름 구성 요소가 NAME_MAX보다 깁니다. 파일: 실행 중인 파일과 연관된 파일 이름을 가리킵니다. argv: 문자 포인터의 null 종료 배열입니다. fcntl()의 FD_CLOEXEC 플래그가 설정된 경우를 제외하고 호출 프로세스 이미지에서 열린 파일 설명자는 새 프로세스 이미지에서 열려 있습니다.

열려 있는 파일 설명자의 경우 파일 잠금을 포함하여 열린 파일 설명의 모든 특성은 변경되지 않습니다. 이러한 이유로 파일 설명자가 닫히면 파일 잠금은 close()에 의해 설명된 대로 제거되지만 close()의 영향을 받지 않는 잠금은 변경되지 않습니다. . 파일에 대한 사용 권한이 거부된 경우(시도된 execve(2)가 오류 EACCES로 실패하면 이러한 함수는 나머지 검색 경로를 계속 검색합니다. 그러나 다른 파일이 발견되지 않으면 Errno가 EACCES로 설정된 채 반환됩니다. 환경 문자열에 대한 문자 포인터 배열에 대한 포인터로 초기화됩니다. argv 및 환경 배열은 각각 null 포인터에 의해 종료됩니다. argv 배열을 종료하는 null 포인터는 argc에서 계산되지 않습니다. . 파일의 헤더가 인식되지 않는 경우(시도된 execve(2)가 오류 ENOEXEC에 실패함) 이러한 함수는 파일의 경로를 첫 번째 인수로 셸(/bin/sh)으로 실행합니다. 이 시도가 실패하면 더 이상 검색이 수행되지 않습니다. .

새 프로세스 이미지 파일의 경로 이름을 지정합니다. 세부 사항은 여기: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html 명령 ./excDemo를 사용 하 여 execDemo의 실행 파일을 실행 한 후, 우리는 다음과 같은 출력을 얻을: 둘 이상의 스레드와 프로세스에서이 함수를 호출 하는 경우 .