리눅스 execvp 예제

By agosto 2, 2019Sem categoria

함수의 exec 제품군은 현재 실행 중인 프로세스를 새 프로세스로 대체합니다. 다른 C 프로그램을 사용하여 C 프로그램을 실행하는 데 사용할 수 있습니다. 그것은 헤더 파일 unistd.h 아래에 온다. exec 가족에는 예와 함께 아래에 표시된 많은 구성원이 있습니다. execvpe() 함수는 글리브 2.11에 처음 나타났습니다. 우리의 요구에 대 한, 우리는 execvp를 사용 합니다 누구의 서명처럼 보이는: 사용자가 줄을 읽고 난 execvp에 대 한 명령으로 첫 번째 단어를 유지 합니다. 파일 execDemo.c가 컴파일될 때, 문 execvp (args[0],args)가 실행되는 즉시,이 프로그램은 프로그램 EXEC.c로 대체됩니다. execvp() 함수가 호출되는 즉시 이 프로그램이 프로그램 EXEC.c로 대체되므로 “종료–“는 인쇄되지 않습니다. 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[]); 이제 주요 함수에서 readline을 호출하여 사용자의 입력을 읽고 위에서 정의한 get_input에 전달합니다.

입력이 구문 분석되면, 우리는 포크를 호출하고 자식 프로세스에서 execvp를 호출합니다. 우리는 코드에 다이빙하기 전에, 먼저 execvp의 의미체계를 이해하기 위해, 다음 다이어그램을 살펴 : 그가 “고양이 file.txt”를 입력 말할 수 있습니다 … 명령은 고양이가 될 것입니다 . 그러나 나는이 execvp ()를 사용하는 방법을 잘 모르겠어요, 나는 몇 가지 자습서를 읽었지만 여전히 그것을 얻지 못했다. execl, execlp, execle, execv, execvp, execvpe – 파일을 실행하여 C에서 execvp() 함수를 사용하는 방법을 보여주는 작은 예제를 보자. 우리는 두 가지를해야합니다. C 파일 , EXEC.c 및 execDemo.c 우리는 execDemo.c에서 execvp() 함수를 호출하여 execDemo.c로 execDemo.c를 대체합니다. 파일을 실행하려고 시도하는 동안 오류가 발생할 때 execlp() 및 execvp()의 동작은 역사적인 관행이지만 전통적으로 문서화되지 않았으며 POSIX 표준에 의해 지정되지 않았습니다. ETXTBSY가 발생하면 BSD(및 기타 시스템)가 자동 절전 모드로 재시도합니다.

리눅스는 하드 오류로 처리하고 즉시 반환합니다. 포크 명령이 완료되면 자식은 상위 프로세스의 정확한 복사본입니다. 그러나 execvp를 호출하면 현재 프로그램이 인수에서 전달된 프로그램으로 바꿉습니다. 즉, 프로세스의 현재 텍스트, 데이터, 힙 및 스택 세그먼트가 대체되지만 프로세스 ID는 변경되지 않지만 프로그램이 완전히 덮어씁니다. 호출이 성공하면 execvp는 반환되지 않으며 이 이후의 자식의 코드는 실행되지 않습니다.