보통 command line 명령어를 프로그램 상에서 실행 시키려고 할때는 보통

 pid = fork();

 switch(pid)
 {
  case -1:
   return -1;

  case 0:   /* child process */
   execlp();

   break;

  }

 do
 {
  child_pid = waitpid(pid, (int *)0, WNOHANG);
  usleep(10000); // 10ms delay
 }while( child_pid == 0 );

이런 코드를 사용하여 처리 하곤 한다.

그런데 이런방법으로는 '>'를 사용해야하는 명령어가 처리가 되지 않는다는것을 알았다.

이를테면 ls -al > ls.txt 라는 명령어는 실행이 되지 않는다는 것이다.

 

그래서 다른 방법이 없을까 찾아본 결과 system() 이라는 함수를 발견하게 되었다.

 

밑에글 출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/system

1.1. 사용법

#include <stdlib.h>

int system(const char *string);
		


1.2. 설명

system() 함수는 /bin/sh -c string를 호출하여 string에 지정된 명령어를 실행하고, 명령어가 끝난후 반환한다. 명령어가 실행동안, SIGCHLD는 블럭되며, SIGINT, SIGQUIT는 무시된다. system() 함수는 기본적으로 fork()와 execve()의 조합응용이다.


1.3. 반환값

만약 /bin/sh를 실행시키기 위한 execve()의 호출이 실패했다면 127이 리턴되며, 다른 에러가 있다면 -1, 그렇지 않다면 명령어의 리턴코드가 반환된다.

string값이 NULL이고, system()이 shell을 이용할 수 있다면 0이 아닌 값을 그렇지 않다면 0을 반환한다.

system()은 다른 wait()상태의 다른 자식에게 영향을 주지 않는다.


1.4. 예제

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    int i = 0;
	int retval;
    retval = system("ls -al");
    printf("Exit Status %d\n", retval);
}
		

 

Posted by cyj4369
,