보통 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을 반환한다.
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); } |
'Embedded Lab > linux, x86' 카테고리의 다른 글
[커널에서 stdlib와같은 C라이브러리] (0) | 2013.01.01 |
---|---|
[LVM NTFS 포맷 및 확장] (0) | 2013.01.01 |
[커널에서 유저 어플리케이션 실행시키기 call_usermodehelper API] (0) | 2013.01.01 |
[DiskSim4.0 + SSDSim(MS)설치 방법] (0) | 2012.12.26 |
[DiskSim4.0 + SSDSim(MS)설치 방법] (0) | 2012.12.26 |