본문 바로가기

컴퓨터/언어,프로그래밍

execl함수와 execv함수의 사용법


우선 execl함수와 execv함수의 사용법을 알려드릴게요.

int execl(const char *path, const char *arg0, ... , const char *argn, NULL);

int execv(const char *path, char *const argv[]);

 

대충이렇습니다.

위 두 함수는 fork로 차일드 프로세스를 만든 후 그 프로세스를 새로운 독립적인 프로세스로 만들어 주는 역할을 합니다.

 

따라서 그것은 우리가 명령프롬프트에 실행파일을 실행하는 것과 비슷한 이치입니다.

예를 들어

/...> gcc -c test.c

이런 명령을 내렸다고 합시다. 그럼

argc는 3이 되고 arg0이 가리키는 놈은 gcc

arg1이 가리키는 놈은 -c

arg2가 가리키는 놈은 test.c

입니다.

 

이런식으로 매개변수가 입력되게 됩니다.

실제 프로그램 상에서도 마찬가지로 위와 같이 할 수 있습니다.

fork를 통해 생성된 차일드 프로세스의 코드안에

execl("/경로/gcc", "/경로/gcc", "-c", "test.c");

이런식으로...

또는

char *argv[]= { "/경로/gcc", "-c", "test.c"};

이런 식으로 설정해 주시고,

execv(argv[0], argv);

의 문장을 집어 넣어주면

 

새로운 독립된 프로세스가 한개 탄생하게 되는 것입니다.

 

결과는 같습니다. 다만 들어가는 인자가 무엇인가만 다른 뿐입니다. 자신이 편하다고 생각하는 방법을 사용하는 겁니다 ^^.

 

--------------------------------------------------------------

 

2. exec()
① 호출하는 프로세스를 새로운 프로세스로 변경시키는데 사용한다,
② exec후, 프로세스의 개수는 그대로 이면 그 프로세스의 PID 번호도 변경되지
   않지만, 프로세스의 내용이 변경된다.
③ 복귀값
   exec()는 성공적으로 마쳐진 경우에는 제어가 복귀되지 않고, 오류 발생시만
   1값을 복귀시킨다.
 
④ 형식
     execl (char*path, char*argo, char*arg1,………,NULL)
     execv (char*path, char**argv)
     execlp(char*filename, char*argo, char*arg1,………,NULL)
     execvp(char*filename, char**argv)
 
   path        실행화일이 있는 곳까지의 전체 경로 이름
  argo         실행하고자 하는 프로그램 이름
  arg1~argn 실행하고자 하는 프로그램의 인수들
  avgv         실행하고자 하는 프로그램의 인수들의 배열
  filename    실행하고자 하는 프로그램 이름
   Ex) ■ vi sc2.c
 
#include <stdio.h>
main()
{
int r;
printf(I am testing execl system call.\n);
r= execl (/bin/ls, ls, -al, NULL);
if(r==-1) printf(Failed the call of execl ft\n);
}
 
gcc o sc2 sc2.c lm
 
■ sc2
   I am testing execl system call.
  total 52
  drwxrwxr-x   1    msjang ……………………….a1.c
  -rwxrwxrwx   1   msjang ………………………..sc1.c
     …………………………
 
printf(I am testing execl system call.\n);
r= execl (/bin/ls, ls, -al, NULL); 
제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...