Loading…

execl 함수 예제

exec() 함수 제품군은 일반 실행 파일에서 새 프로세스 이미지를 만듭니다. 이 파일은 실행 가능한 개체 파일 또는 인터프리터 스크립트입니다. 호출 프로세스가 새 프로세스로 기능적으로 대체되므로 성공적인 호출에서 exec() 함수에 대한 반환이 없습니다. 호출이 성공하면 atexit())에 의해 이전에 등록된 모든 함수가 더 이상 등록되지 않습니다. exec() 함수가 있는 프로그램에서 지정한 인수는 해당 main() 인수의 새 프로세스 이미지에 전달됩니다. envp 인수를 사용하지 않는 exec() 형식의 경우 새 프로세스 이미지에 대한 환경은 호출 프로세스의 외부 변수 환경에서 가져옵니다. 그렇지 않으면 envp 인수는 새 프로세스 이미지에 대한 환경을 지정합니다. 자세한 내용은 여기: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html C에서 execvp() 함수를 사용 하는 방법을 보여 줄 수 있는 작은 예제를 보자. 우리는 두 가지를해야합니다.

C 파일 , EXEC.c 및 execDemo.c 우리는 execDemo.c에서 execvp() 함수를 호출하여 execDemo.c로 execDemo.c를 대체합니다. exec() 함수는 vfork() 작업의 자식이 아닌 비 NuTCRACKER 플랫폼 프로세스에서 호출되었습니다. 이 예제에서는 myprog가 현재 작업 디렉토리에 있는 경우 찾을 수 있습니다. 다른 스레드가 환경 변수를 동시에 수정하는 동안 다중 스레드 응용 프로그램은 환경 변수에 액세스하거나 수정하기 위해 환경 변수를 사용해서는 안 됩니다. 환경 변수에 종속된 모든 함수에 대한 호출은 해당 환경 변수에 액세스하기 위해 환경 변수를 사용하는 것으로 간주됩니다. 파일의 헤더가 인식되지 않는 경우(시도된 execve(2)가 오류 ENOEXEC에 실패함) 이러한 함수는 파일의 경로를 첫 번째 인수로 셸(/bin/sh)으로 실행합니다. 이 시도가 실패하면 더 이상 검색이 수행되지 않습니다. 성공적으로 완료되면 파일의 st_atime 필드가 업데이트로 표시됩니다. exec* 함수가 실패했지만 프로세스 이미지 파일을 찾을 수 있는 경우 st_atime 필드가 업데이트용으로 표시되어 있는지 여부는 정의되지 않습니다. 성공시 프로세스 이미지 파일은 open()을 사용하여 열리는 것으로 간주됩니다. 해당 close()는 이 열기 후에 한 번에 발생하는 것으로 간주되지만 프로세스가 종료되거나 exec* 함수 중 하나에 대한 후속 호출이 성공적으로 완료되기 전에 발생합니다.

이 호출의 결과로 C 언어 프로그램이 실행되면 다음과 같이 C 언어 함수 호출로 입력됩니다. execvp() 함수가 호출되는 즉시 이 프로그램이 프로그램 EXEC.c로 대체되므로 “종료–“는 인쇄되지 않습니다. execle() 및 execve()를 제외하고 이러한 함수는 환경이 수정되지 않는 한 MT-안전입니다. 이러한 함수를 호출할 때 환경이 수정되는 경우 동작은 지정되지 않습니다.