C함수 다른 프로그램 실행 및 대기 system()
다른 프로그램을 실행하고 종료할 때까지 기다립니다. 예제를 먼저 보시겠습니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
system( "ls -al");
printf( "system() 시행 후에, 이 문자열이 출력됩니다.n");
}
실행하면 아래와 같이 출력됩니다.
]$ ./a.out
합계 72
drwxr-xr-x 2 jwjw jwjw 4096 9월 30 13:41 .
drwxr-xr-x 7 jwjw jwjw 4096 9월 25 06:20 ..
-rwxrwxr-x 1 jwjw jwjw 4815 9월 30 13:41 a.out
-rw-r--r-- 1 jwjw jwjw 146 9월 30 13:41 test.c
-rw-r--r-- 1 jwjw jwjw 18 9월 25 13:00 test.txt
system() 시행 후에, 이 문자열이 출력됩니다.
]$
다른 프로그램을 실행할 수 있어서 좋지만, 종료될 때까지 대기하는 것이 싫다면 fork() 함수로 자식 프로세스를 생성하여 실행할 수 있습니다. 이 방법은 아래 예제에 담았습니다.
- 헤더: stdlib.h
- 형태: int system (const char * string)
- 인수: char string 실행할 프로그램 파일 명
- 반환: 127 : /bin/sh 을 위한 execve() 호출에 실패
-1: 127 이외의 다른 에러 발생
0: 함수 실행에 성공
다른 값: 지정한 실행 파일이 없거나 어떤 문제로 shell을 이용할 수 없음
C언어 system() 함수 예제
#include <stdio.h> // printf()
#include <stdlib.h> // system()
#include <unistd.h> // fork(), sleep()
int main()
{
int counter =0;
switch( fork()){
case -1 :
printf( "자식 프로세스 생성 실패\n");
return -1;
case 0 :
printf( "저는 자식 프로세스로 system()을 호출하겠습니다.\n");
system( "ls -al");
break;
default :
printf( "저는 부모 프로세스로 카운트를 하겠습니다.\n");
while( 1 ){
printf( "부모: %d\n", counter++);
sleep( 1);
}
}
}
C언어 system() 예제 실행 결과
]$ ./a.out
저는 부모 프로세스로 카운트를 하겠습니다.
부모: 0
저는 자식 프로세스로 system()을 호출하겠습니다.
합계 24
drwxrwxr-x 2 jwjw jwjw 4096 3월 17 06:49 .
drwxr-xr-x 19 jwjw jwjw 4096 3월 17 06:47 ..
-rwxrwxr-x 1 jwjw jwjw 8472 3월 17 06:49 a.out
-rw-rw-r-- 1 jwjw jwjw 575 3월 17 06:49 test.c
부모: 1
부모: 2
부모: 3
부모: 4
부모: 5
부모: 6
부모: 7
^C
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 프로세스 생성 함수 fork() (2) | 2020.03.15 |
---|---|
C언어 다른 프로그램 실행 함수execve() (0) | 2020.03.15 |
C언어 다른 프로그램 실행 함수 execvp() (0) | 2020.03.15 |