system()함수는 child process를 실행하지만 실행시킨 child process가
끝날때까지 기다리는게 아니고 바로 본메인으로 돌아와서 메인의 나머지
를 실행시킵니다. exec계열은 child를 실행시키고 main을 종료합니다.
spawn계열의 함수는 child를 실행시키고 실행시킨 child가 종료할때까지 기다렸다가
child가 종료되었을때 비로서 main으로 돌아와서 나머지를 실행시킵니다.
간단한 예제를 든다면요
#include <process.h>
#include <stdio.h>
int main(void)
{
int result;
result = spawnlp(P_WAIT, "notepad", " test.txt", NULL);
//test.txt앞에 공백이 들어가 있습니다 즉 notepad test.txt이기 때문에..ㅎㅎ;
if(result == -1){
printf("error\n");
return 1;
}
return 0;
}
이렇게 하시면 노트패드로 test.txt파일을 열고 이 노트패드를 종료할때
까지는 main은 중지합니다.
spawnlp(int mode, char *path, char *argu0, char *argu1, ,,, , NULL);
mode에서 P_WAIT 가 child프로그램이 끝날때까지 기다리는것입니다.
char *path; 실행시킬 프로그램입니다.
char *argu0, *argu1, ,, ; 인자리스트입니다.
되도록이면 실행시킬 프로그램을 같은 디렉토리에 넣고 하세요..
박진만 님이 쓰신 글 :
: 답변에 정말 감사드립니다.
:
: *******답변 내용*********
: 오전&오후 spawn()함수를 사용해 보세요.. 07/17 16:13 X
: 오전&오후 이함수에는 인자로 실행시킨 프로그램이 끝날때까지 메인프로그램을 중지시킬수 있습니다. 07/17 16:14 X
:
:
: 그런데요 exec나 spawn를 써보려고 하는데 정확한 사용법을 모르겠습니다.
:
: 그래서인지 인수값도 안맞는것 같아서 실행이 안되는것 같아요..
:
: 만약 외부명령인 sqlplus 를 실행시켜 ID/PASS는 dbms/kkk 이고 test.sql을 구동시키려고하면..물론 아래의 질문처럼 백그라운드로 돌려서 그 프로세서가 끝날때까지 main 프로그램을 종료시키지 않으수 있는 방법이 있을까요??
:
: system("sqlplus dbms/kkkk @test.sql &");
:
: 이렇게 했더니 main이 바로 끝나버리는데 그럼 exec나 spawn을 써서 어떻게 종료될때까지 기다리는 걸까요...기왕이면 예제를 보여주시면 더욱 고맙겠습니다.
:
: 말도 안되는 질문만 해서 죄송합니다.
: 고수님들의 조언 부탁드립니다.
:
:
:
: 박진만 님이 쓰신 글 :
: : 안녕하세요. 질문이 있어서요.
: : system 함수를 이용해서 외부 명령을 실행하려고 하는데
: : 예를 들어
: :
: : main(){
: : system("sqlplus dbms/kkkk @test.sql");
: : }
: :
: : 하면 당연히 sql 작업 test.sql를 돌리고 나서 위의 프로그램이 종료가 되는데
: :
: : main(){
: : system("sqlplus dbms/kkkk @test.sql &");
: : }
: :
: : 이렇게 백그라운드로 돌리면 sql문이 끝나지도 않았는데 그 다음줄로 넘어가서 프로그램이
: : 종료가 됩니다.
: :
: : 혹시 위의 경우처럼 백그라운드로 돌려도 sql문이 실행될때까지 기다렸다가 sql문이 끝나고 나서
: : 프로그램이 종료되도록 하는 방법은 없나요?????
: :
: : 고수님들의 조언 부탁드립니다.
|