Comunidad Empresarial Dinamiza

 
 
  • No hay categorías

 
No te pierdas...
 

 
Publicado 02/08/2019 por admin en
 
 

execvp 예제

파일을 실행하려고 시도하는 동안 오류가 발생할 때 execlp() 및 execvp()의 동작은 역사적인 관행이지만 전통적으로 문서화되지 않았으며 POSIX 표준에 의해 지정되지 않았습니다. ETXTBSY가 발생하면 BSD(및 기타 시스템)가 자동 절전 모드로 재시도합니다. 리눅스는 하드 오류로 처리하고 즉시 반환합니다. C에서 execvp() 함수를 사용하는 방법을 보여 줄 작은 예제를 살펴보겠습니다. 우리는 두 가지를해야합니다. C 파일 , EXEC.c 및 execDemo.c 우리는 execDemo.c에서 execvp() 함수를 호출하여 execDemo.c로 execDemo.c를 대체합니다. execv(), execvp(및 execvpe() 함수는 새 프로그램에서 사용할 수 있는 인수 목록을 나타내는 null 종료된 문자열에 대한 포인터 배열을 제공합니다. 첫 번째 인수는 규칙에 따라 실행 중인 파일과 연결된 파일 이름을 가리킬 수 있습니다. 포인터의 배열은 NULL 포인터에 의해 종료되어야 합니다. 이제 주요 함수에서 readline을 호출하여 사용자의 입력을 읽고 위에서 정의한 get_input에 전달합니다. 입력이 구문 분석되면, 우리는 포크를 호출하고 자식 프로세스에서 execvp를 호출합니다.

코드를 살펴보기 전에 다음 다이어그램을 살펴보고 execvp의 의미체계를 먼저 이해합니다. 일반적으로 함수 execlp() 및 execvp()는 위에서 설명한 오류와 ENOMEM 및 E2BIG을 제외한 모든 오류를 무시했습니다. 위에서 설명한 것 이외의 오류가 발생하면 반환됩니다. 포크 명령이 완료되면 자식은 상위 프로세스의 정확한 복사본입니다. 그러나 execvp를 호출하면 현재 프로그램이 인수에서 전달된 프로그램으로 바꿉습니다. 즉, 프로세스의 현재 텍스트, 데이터, 힙 및 스택 세그먼트가 대체되지만 프로세스 ID는 변경되지 않지만 프로그램이 완전히 덮어씁니다. 호출이 성공하면 execvp는 반환되지 않으며 이 이후의 자식의 코드는 실행되지 않습니다. 그리고 여기에 주요 기능입니다 : 우리의 요구에 대해, 우리는 그 서명이 다음과 같이 보이는 execvp를 사용합니다 : 업데이트 : Saul은 <0의 오류를 확인하는 것이 전통적으로 == -1보다 낫다고 언급했습니다. 그에 대한 요법.

그에 따라 게시물과 코드 예제를 업데이트했습니다. 그가 «고양이 file.txt»를 입력 할 것이라고 말할 수 있습니다 … 명령은 고양이가 될 것입니다 . 그러나 나는이 execvp ()를 사용하는 방법을 잘 모르겠어요, 나는 몇 가지 자습서를 읽었지만 여전히 그것을 얻지 못했다. execvpe() 함수는 글리브 2.11에 처음 나타났습니다. 포크 후 종료 호출이 전체 프로그램을 종료하는 동안, execvp 후 종료 호출은 코드가 자식 프로세스에만 속하기 때문에 자식만 종료합니다. 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[]); execl, execlp, execle, execv, execvp, execvpe – 파일 execDemo.c가 컴파일될 때, 문 execvp (args[0],args)가 실행되는 즉시 파일을 실행, 이 프로그램은 프로그램 EXEC.c로 대체됩니다. execvp() 함수가 호출되는 즉시 이 프로그램이 프로그램 EXEC.c로 대체되므로 «종료–«는 인쇄되지 않습니다. 위의 변경 사항이 있는 코드는 여기에서 확인할 수 있으며 컴파일하고 실행하면 cd 명령을 실행할 수 있습니다. 다음은 예제 출력입니다: 함수의 exec 제품군은 현재 실행 중인 프로세스를 새 프로세스로 바꿉니다. 다른 C 프로그램을 사용하여 C 프로그램을 실행하는 데 사용할 수 있습니다.


admin