C언어 다른 프로그램 실행 및 대기 함수 system()

2020. 3. 15. 12:14 컴퓨터/프로그래밍

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을 이용할 수 없음

예제

#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);
      }
   }
}

실행 결과

]$ ./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
]$
이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

error: Content is protected !!