본문 바로가기
Programming/C/C++

system함수, exec계열의 함수(execl, execv, execle, execve, execlp, execvp)

by bbolmin 2012. 5. 16.

먼저 system함수를 알아 보겠습니다.

 

원형은 int system(const char* command)이며 command에 해당하는 명령어를 수행하는 함수입니다.

(반환형이 int인데 성공시 0을 반환, 실패시 -1을 리턴합니다.)

 

system함수로 ls명령어를 실행해본 화면입니다.

   ->

 

/bin/ls처럼 절대 경로말고 ls로만 입력해도 ls가 실행됩니다. (환경변수 PATH를 이용하는 듯..)

그리고 옵션을 사용할 때는 단순히 "/bin/ls -a"와 같이 해주면 됩니다.

  ->

 

 


 

이제 exec계열의 함수(execl, execv, execle, execve, execlp, execvp)에 대해서 알아 보겠습니다.

 

아래 그림에서 exec계열의 함수에 대해 자세히 설명해줍니다.

 

위의 exec함수들을 보면 exec에다가 l, v, e, p등 여러가지가 붙어 있습니다.

 

정리를 해보면

1. l, v : argv인자를 넘겨줄 때 사용합니다. (l일 경우는 char *로 하나씩 v일 경우에는 char *[]로 배열로 한번에 넘겨줌) 

2. e : 환경변수를 넘겨줄 때 사용합니다. (e는 위에서 v와 같이 char *[]로 배열로 넘겨줍니다.)

3. p : p가 있는 경우에는 환경변수 PATH를 참조하기 때문에 절대경로를 입력하지 않아도 됩니다. (위에서 system함수 처럼)

그럼 간단히 execl와 execve를 써보겠습니다.

 

(1) execl

  ->

 

(2) execve 

 ->

( 딱히 환경변수에 넣을게 없네요; )

위와 같이 실행되는 것을 볼 수 있습니다. (만약 /bin/ls라고 안하고 ls라고 하면 실행이 안되겠죠 --> p가 붙어 있다면 PATH에서 찾기 때문에 실행됩니다.)

 

 

'Programming > C/C++' 카테고리의 다른 글

c언어 - 유클리드 알고리즘  (0) 2012.05.26
system()과 execl()의 차이  (0) 2012.05.16
프로그램 종료2 - atexit(), _exit()  (0) 2012.05.03
프로그램 종료 - assert(), exit(), abort()  (0) 2012.05.02
PF_INET와 AF_INET  (3) 2012.04.30