반응형
exec.. execl, execle, execlp, execlpe, execv, execve, execvp, execvpe, process.h
#inlcude <process.h> int execl(char *path, char *arg0, *arg1, ... NULL); int execle(char *path, char *arg0, *arg1, ... NULL, char **env); int execlp(char *path, char *arg0, *arg1, ... NULL); int execlpe(char *path, char *arg0, *arg1, ... NULL, char **env); int execv(char *path, char *argv[]); int execve(char *path, char *argv[], char **env); int execvp(char *path, char *argv[]); int execvpe(char *path, char *argv[], char **env); |
exec... 계열의 함수들은 하위 처리과정(child process)으로 불리는 다른 프로그램을 로드하고 실행시킵니다.
path: 호출되는 하위 처리 과정의 파일명
파일의 확장명이 주어지지 않으면 파일 이름만으로 먼저 검색하고, 동일한 파일이 발견되지 않으면 .COM, .EXE 순으로 확장자를 추가해서 검색합니다.
확장자가 명시되어 있으면 해당 파일만 검색합니다.
exec.. 다음의 l, v, p, e 문자는 다음과 같은 의미로 사용됩니다.
- l : 인수 포인터는 각각 개별적인 인수(arg0, arg1, arg2, ...)로 전달됩니다.
일반적으로 전달될 인수의 갯수를 알고 있는 경우 사용합니다. - v: 인수 포인터는 포인터 배열로 전달됩니다.
일반적으로 인수의 개수가 가변일 때 사용합니다. - p: DOS의 PATH 환경변수에 지정되어 있는 경로에서 파일을 검색합니다.
p가 없는 경우는 현재 작업 디렉토리에서만 검색합니다. - e: 인수 포인터 env는 하위 처리과정의 환경 변수들을 변경시키면서 하우 처리 과정에 전달됩니다.
exec.. 계열의 함수는 l이나 v 중 하나를 가져야 합니다.
exec... 계열의 함수들은 작업이 성공적으로 수행되면 아무것도 반환하지 않고 실패하는 경우에 -1을 반환하고 전역변수 errno를 다음 중 하나로 설정합니다.
- E2BIG: 인수 리스트가 너무 길다
- EACCES: 허가되지 않음
- EMFILE: 너무 많은 파일들이 개방되어 있다.
- ENOENT: 경로나 파일명을 발견할 수 없다.
- ENOEXEC: 함수 형식에서 오류가 발생하였다.
- ENOMEM: 사용 가능한 메모리가 부족하다.
다음 예제는 윈도우의 계산기를 호출하는 예제입니다.
#include <stdio.h>
#include <process.h>
int main(int argc, char *argv[])
{
//execl("\\windows\\system32\\calc.exe", "\\windows\\system32\\calce.exe", NULL);
execlp("calc.exe", "calce.exe", NULL);
return 0;
}
비주얼스튜디오에서는 아래의 코드를 사용합니다.
#include <stdio.h>
#include <process.h>
int main(int argc, char *argv[])
{
//_execl("\\windows\\system32\\calc.exe", "\\windows\\system32\\calce.exe", NULL);
_execlp("calc.exe", "calce.exe", NULL);
return 0;
}
반응형
'C_C++ > C_라이브러리_함수' 카테고리의 다른 글
(C언어) exp, elpl: 지수e의 x 제곱값 계산 (0) | 2023.02.06 |
---|---|
(C언어) exit: 프로그램을 종료시킨다 (1) | 2023.02.03 |
(C언어) eof, _eof: 파일의 끝인지 검사한다 (0) | 2023.02.03 |
(C언어) evct: 부동소숫점 숫자를 문자열로 변환 (0) | 2023.02.03 |
(C언어) div: 나눗셈의 몫과 나머지를 구함 (0) | 2023.02.03 |