리눅스 c에서 exec 관련함수 문제입니다.
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc,char* argv[]){
int num = atoi(argv[1]);
char *argv2[] = {"ex4","0",NULL};
int i;
for(i=0;i<num;i++){
printf("*"); ////// 궁금한 부분 ////////
//부모 프로세스
if(fork() != 0){
printf("+");
execv("./ex4",argv2);
fork();
}
//자식 프로세스
fork();
execv("./ex4",argv2);
}
printf("-");
return 0;
}
-----------------------------------------------------------------
파일명은 ex4.c 입니다. 위의 소스를 인자값을 3으로 주고 실행시키면 "-"가 3개 찍히는 것을 알 수 있습니다. 그런데 소스중 "*" 부분을 화면에 출력하는 부분이 있는데 실제 실행했을땐 나타나지 않습니다. 그 이유가 무엇인가요.. :(
printf() 바로 밑에 fflush(stdout); 쓰니까 보이긴 합
printf() 바로 밑에 fflush(stdout); 쓰니까 보이긴 합니다
음..printf() 함수를 통해서 버퍼에 저장된 값이 화면에 출력되기
음..printf() 함수를 통해서 버퍼에 저장된 값이 화면에 출력되기 전에 exec 함수의 실행으로 인해서 프로세스가 죽어버리기 때문에 화면에 "*" 부분이 출력되지 않는것 같은데.. 그럼 printf() 함수를 통해서 버퍼에 저장되어있는 값은 어느 시점에서 화면에 출력되는 건가요.. 메인 프로세스가 모두 끝나는 시점에서 버퍼의 자료가 화면에 출력되는건가요?
그건...
printf 함수는 아시다시피 버퍼에 저장을 해 그 데이터를 화면에 출력합니다. 그 조건은 \n 을 만나거나 flush가 되거나 등등....
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
댓글 달기