Manpages

이 름

execl, execlp, execle, execv, execvp − 파 일 실 행 하 기

사 용 법

#include <unistd.h>

extern char **environ;

int execl( const char *path, const char *arg, ...);
int execlp( const char *
file, 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 *
file, char *const argv[]);

설 명

exec 함 수 계 열 은 현 재 프 로 세 스 이 미 지 를 새 로 운 프 로 세 스 이 미 지 로 바 꾼 다 . 이 매 뉴 얼 에 기 술 된 함 수 들 은 execve(2) 함 수 의 전 위 들 이 다 . (현 재 프 로 세 스 의 대 체 에 관 한 세 부 적 인 정 보 를 원 하 면 execve 매 뉴 얼 페 이 지 를 참 고 해 라 .)

이 들 함 수 의 초 기 인 자 는 실 행 되 어 야 하 는 파 일 의 경 로 명 이 다 .

const char *argexecl, execlp, 그 리 고 execle 함 수 들 에 있 는 연 속 적 인 것 들 은 arg0, arg1, ..., argn 등 으 로 생 각 할 수 있 다 . 그 것 들 은 실 행 프 로 그 램 이 이 용 할 수 있 는 인 자 리 스 트 를 나 타 내 는 하 나 나 그 이 상 의 null로 끝 난 문 자 열 을 가 리 킨 다 .

편 의 를 위 해 , 처 음 인 자 는 실 행 되 어 야 할 파 일 의 이 름 이 다 . 인 자 리 스 트 는 반 드 시 NULL 포 인 터 로 끝 나 야 한 다 .

execvexecvp 함 수 는 새 로 운 프 로 그 램 이 이 용 할 수 있 는 인 자 리 스 트 를 나 타 내 는 null로 끝 난 문 자 열 의 포 인 터 배 열 을 제 공 한 다 . 편 리 를 위 해 , 첫 인 자 는 실 행 되 어 야 할 파 일 과 관 련 된 파 일 이 름 을 가 리 켜 야 한 다 . 포 인 터 배 열 은 반 드 시 NULL 포 인 터 로 끝 나 야 한 다 .

execle 함 수 는 또 한 실 행 프 로 세 서 의 환 경 변 수 를 지 정 해 야 하 며 , 파 라 미 터 리 스 트 에 있 는 인 자 리 스 트 나 추 가 적 인 파 라 미 터 를 가 지 고 있 는 argv 배 열 에 대 한 포 인 터 를 끝 마 치 도 록 NULL 포 인 터 가 뒤 따 라 온 다 . 이 러 한 추 가 적 인 파 라 미 터 는 null로 끝 난 문 자 열 에 대 한 포 인 터 배 열 이 며 반 드 시 NULL 로 끝 나 야 한 다 . 다 른 함 수 들 은 현 재 프 로 세 스 에 있 는 외 부 변 수 environ 에 서 새 로 운 프 로 세 스 이 미 지 를 위 한 환 경 변 수 를 가 져 온 다 .

이 들 함 수 들 중 몇 몇 은 특 별 한 의 미 를 가 지 고 있 다 .

만 일 지 정 된 파 일 이 름 이 slash(/) 문 자 를 포 함 하 지 않 는 다 면 execlpexecvp 함 수 는 실 행 파 일 을 찾 기 위 해 shell 의 행 동 을 복 사 한 다 . 탐 색 경 로 는 PATH 변 수 에 지 정 된 경 로 이 다 . 이 변 수 가 지 정 되 지 않 는 다 면 , 기 본 경 로 ’’:/bin:/usr/bin’’가 사 용 된 다 . 추 가 적 으 로 , 어 떤 에 러 들 은 특 별 하 게 처 리 된 다 .

만 일 허 가 권 이 파 일 에 금 지 되 어 있 다 면 ( execveEACCES를 반 환 한 다 .), 이 들 함 수 들 은 탐 색 경 로 의 나 머 지 를 계 속 해 서 탐 색 한 다 . 그 러 나 만 일 어 떤 다 른 파 일 이 발 견 된 다 면 , 전 역 변 수 errnoEACCES로 설 정 하 고 반 환 된 다 .

만 일 파 일 의 헤 더 가 인 식 되 지 않 는 다 면 ( execveENOEXEC를 반 환 한 다 ), 이 들 함 수 들 은 첫 인 자 로 써 파 일 의 경 로 에 있 는 shell을 실 행 한 다 . (만 일 이 들 시 도 가 실 패 한 다 면 , 추 가 적 인 탐 색 은 행 해 지 지 않 는 다 .)

반 환 값

만 일 exec 함 수 들 이 반 환 한 다 면 , 에 러 가 일 어 난 것 이 다 . 반 환 값 은 −1이 며 , 전 역 변 수 errno 는 에 러 를 가 리 키 도 록 설 정 된 다 .

파 일

/bin/sh

에 러

이 들 함 수 모 두 는 실 패 할 수 있 으 며 라 이 브 러 리 함 수 execve(2)에 지 정 된 에 러 중 어 떤 것 으 로 errno 가 설 정 된 다 .

관 련 항 목

sh(1), execve(2), fork(2), environ(5), ptrace(2)

호 환

몇 몇 다 른 시 스 템 에 서 기 본 PATH는 anti-Trojan-horse 처 럼 /bin 그 리 고 /usr/bin후 에 나 열 된 현 재 작 업 디 렉 토 리 를 가 진 다 . libc 5.4.7에 서 , 리 눅 스 는 여 전 히 현 재 작 업 디 렉 토 리 를 기 본 PATH로 사 용 한 다 .

파 일 을 실 행 하 는 동 안 에 러 가 나 타 났 을 때 execlp 그 리 고 execvp 의 행 동 은 역 사 적 관 습 에 따 른 다 . 그 러 나 전 통 적 으 로 문 서 화 되 지 않 으 며 POSIX 표 준 에 도 지 정 되 지 않 는 다 . BSD(그 리 고 다 른 시 스 템 )는 자 동 적 으 로 sleep을 하 며 만 일 ETXTBSY를 만 난 다 면 다 시 시 도 한 다 . Linux는 어 려 운 에 러 로 대 하 고 바 로 반 환 한 다 .

전 통 적 으 로 , 함 수 execlpexecvp 는 위 에 기 술 된 것 들 그 리 고 ENOMEM 그 리 고 E2BIG를 제 외 한 모 든 에 러 를 무 시 하 며 리 턴 된 다 . 이 들 함 수 는 위 에 기 술 된 것 들 이 외 의 에 러 를 만 난 다 면 바 로 리 턴 된 다 .

표 준

Execl, execv, execle, execlp 그 리 고 execvp 는 IEEE Std1003.1-88 (’’POSIX.1’’)를 따 른 다 .

번 역

정 강 훈 <skyeyes [AT] soback.net> 2001년 3월 8일
한 글 Manpage 프 로 젝 트 (http://man.kldp.org) 2005년 2월 17일