C의 Exec 시스템 호출

Exec System Call C



exec 패밀리는 C에서 많은 기능을 가지고 있습니다. 이러한 C 기능은 기본적으로 메인 프로그램과 출력을 출력하는 별도의 프로세스에서 시스템 명령을 실행하는 데 사용됩니다.

이 기사에서는 exec 패밀리 함수에 대해 이야기하고 C에서 이러한 exec 패밀리 함수를 각각 사용하는 방법을 보여 드리겠습니다. 이제 시작하겠습니다.







Exec 제품군의 C 시스템 기능:

exec 함수 패밀리는 헤더에 정의되어 있습니다. unistd.h . 따라서 이러한 기능을 사용하려는 C 프로그램에서 이 헤더를 사용해야 합니다.



사용 가능한 exec 함수와 해당 함수 매개변수는 다음과 같습니다.



  • int execl(const char *경로, const char *arg, …, NULL);
  • int execlp(const char *파일, const char *arg, …, NULL );
  • int execv(const char *경로, char *const argv[]);
  • int execvp(const char *파일, char *const argv[]);
  • int execle(const char *경로, const char *arg, …, NULL, char * const envp[]);
  • int execve(const char *파일, char *const argv[], char *const 환경[]);

각각의 기능과 사용 방법을 알아보겠습니다.





execl() 시스템 기능:

execl()에서 시스템 함수는 실행 가능한 바이너리 파일의 경로를 취합니다(즉, / 빈 / ls )를 첫 번째 및 두 번째 인수로 사용합니다. 그런 다음 인수(즉, -ㅋ , /집 ) 다음에 실행 파일에 전달하려는 없는 . 그런 다음 execl() 시스템 함수가 명령을 실행하고 출력을 인쇄합니다. 오류가 발생하면 execl()은 -1을 반환합니다. 그렇지 않으면 아무 것도 반환하지 않습니다.

통사론:

정수실행(상수 *, 상수 *화난,...,없는);

execl() 시스템 함수의 예는 다음과 같습니다.



#포함하다

정수기본(무효의) {
*바이너리 경로= '/ 빈 / ls';
*인수1= '-으';
*인수2= '/집';

실행(바이너리 경로,바이너리 경로,인수1,인수2,없는);

반품 0;
}

나는 달렸다 ls -lh / 홈 execl() 시스템 함수를 사용하는 명령. 보시다시피 올바른 결과가 표시됩니다.

execlp() 시스템 기능:

execl()은 환경 변수. 따라서 execl()로 실행하려면 실행 파일의 전체 경로가 필요합니다. execlp()는 PATH 환경 변수를 사용합니다. 따라서 실행 파일이나 명령이 PATH에서 사용 가능한 경우 명령이나 파일 이름으로 실행하기에 충분하며 전체 경로는 필요하지 않습니다.

통사론:

정수예외(상수 *파일, 상수 *화난,...,없는);

다음과 같이 execlp() 시스템 함수를 사용하여 execl() 예제를 다시 작성할 수 있습니다.

#포함하다

정수기본(무효의) {
*프로그램 이름= '일';
*인수1= '-으';
*인수2= '/집';

예외(프로그램 이름,프로그램 이름,인수1,인수2,없는);

반품 0;
}

나는 명령 이름 만 전달했습니다. , 전체 경로가 아님 / 빈 / ls . 보시다시피 이전과 동일한 출력을 얻었습니다.

execv() 시스템 기능:

execl() 함수에서 실행 파일의 매개 변수는 다른 인수로 함수에 전달됩니다. execv()를 사용하면 NULL로 끝나는 배열의 모든 매개변수를 전달할 수 있습니다. argv . 배열의 첫 번째 요소는 실행 파일의 경로여야 합니다. 그렇지 않으면 execv() 함수는 execl() 함수처럼 작동합니다.

통사론:

정수임원(상수 *, *상수argv[]);

execl() 예제를 다음과 같이 다시 작성할 수 있습니다.

#포함하다

정수기본(무효의) {
*바이너리 경로= '/ 빈 / ls';
*인수[] = {바이너리 경로, '-으', '/집',없는};

임원(바이너리 경로,인수);

반품 0;
}

보시다시피 올바른 출력을 얻고 있습니다.

execvp() 시스템 기능:

execv() 시스템 함수와 같은 방식으로 작동합니다. 그러나 PATH 환경 변수가 사용됩니다. 따라서 execlp()와 같이 실행 파일의 전체 경로가 필요하지 않습니다.

통사론:

정수execvp(상수 *파일, *상수argv[]);

execv() 예제를 다음과 같이 다시 작성할 수 있습니다.

#포함하다

정수기본(무효의) {
*프로그램 이름= '일';
*인수[] = {프로그램 이름, '-으', '/집',없는};

execvp(프로그램 이름,인수);

반품 0;
}

보시다시피 올바른 출력이 표시됩니다.

execle() 시스템 기능:

execl()과 동일하게 작동하지만 사용자 고유의 환경 변수를 함께 제공할 수 있습니다. 환경 변수는 배열로 전달됩니다. 환경 . 의 마지막 요소 환경 배열은 NULL이어야 합니다. 다른 모든 요소는 키-값 쌍을 문자열로 포함합니다.

통사론:

정수실행하다(상수 *, 상수 *화난,...,없는, * 상수환경[] );

execle() 시스템 함수의 예는 다음과 같습니다.

#포함하다

정수기본(무효의) {
*바이너리 경로= '/빈/배쉬';
*인수1= '-씨';
*인수2= '던졌다 '$HOSTNAME 방문:브라우저에서 $PORT.'';
*상수환경[] = {'호스트이름=www.linuxhint.com', '포트=8080',없는};

실행하다(바이너리 경로,바이너리 경로,인수1,인수2,없는,환경);

반품 0;
}

두 개의 환경 변수를 전달했습니다. 호스트 이름 그리고 포트 execle() 함수에. 보시다시피 실행 파일에서 액세스할 수 있습니다. /bin/bash .

execve() 시스템 기능:

execle()과 마찬가지로 execve()와 함께 고유한 환경 변수를 제공할 수 있습니다. execv()에서와 같이 인수를 배열로 전달할 수도 있습니다.

통사론:

정수집행하다(상수 *파일, *상수argv[], *상수환경[]);

execle() 예제는 다음과 같이 다시 작성할 수 있습니다.

#포함하다

정수기본(무효의) {
*바이너리 경로= '/빈/배쉬';
*상수인수[] = {바이너리 경로, '-씨', '던졌다 '$HOSTNAME 방문:$PORT
브라우저에서.'',없는};
*상수환경[] = {'호스트이름=www.linuxhint.com', '포트=8080',없는};

집행하다(바이너리 경로,인수,환경);

반품 0;
}

보시다시피 execle() 예제와 동일한 출력을 얻습니다.

이것이 Linux에서 시스템 프로그래밍을 위해 C에서 exec 함수 패밀리를 사용하는 방법입니다. 이 기사를 읽어 주셔서 감사합니다.