fork()에 실행 흐름에 관한 질문 입니다... (추가질문 BUFSIZ)
글쓴이: seonghoons / 작성시간: 금, 2009/07/24 - 2:59오후
#include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { int data_processed; int file_pipes[2]; const char some_data[]="123"; char buffer[BUFSIZ+1]; pid_t fork_result;// 프로세스의 PID을 담는 변수 memset(buffer, '\0', sizeof(buffer)); if (pipe(file_pipes) == 0) { fork_result = fork(); if (fork_result == -1) //새로운 프로세스 생성 실패 { fprintf(stderr, "Fork failure"); exit(EXIT_FAILURE); } if (fork_result == 0) //fork성공, 자식프로세스에 있는 상태 { sleep(1); printf("자식 프로세스\n"); data_processed = read(file_pipes[0], buffer, BUFSIZ); printf("Read %d bytes: %s\n", data_processed, buffer); exit(EXIT_SUCCESS); } else { sleep(1); printf("부모 프로세스 \n"); data_processed = write(file_pipes[1], some_data, sizeof(some_data)); printf("Wrote %d bytes\n", data_processed); } } exit(EXIT_SUCCESS); }
실행할 때 가끔씩 결과의 순서가 바뀌어서 나오는데요
정확한 이유를 모르겠습니다
실행결과가..
--------------------------------
부모 프로세스
자식 프로세스
Wrote 4 bytes
Read 4 bytes: 123
자식 프로세스
부모 프로세스
Read 4 bytes: 123
Wrote 4 bytes
--------------------------------
이런식으로 나오네요..
추가 질문인데요
코드에 보시면
--> char buffer[BUFSIZ+1];
여기서 저 BUFSIZ는 어디서 정의 되어있는 건지 궁금합니다
sizeof(BUFSIZ) 결과 8192 라는 값이 나왔는데요
여기저기 헤더파일들을 뒤져봐도 잘 모르겠더라구요..ㅡㅜ
도와주세요^^;;;
Forums:
스케줄링 때문에 그렇습니다
OS에는 여러개의 프로세스가 돌아가고 스케줄링을 해서 어떤 하나의 프로세스가 cpu를 점유하게 되죠?
fork를 통해서 자식프로세스가 생성되면 자식 프로세스도 스케줄링될 수가 있습니다.
이때 스케줄러가 부모 프로세스를 먼저 실행시킬수도 있고 자식 프로세스를 먼저 실행 시킬 수도 있어서 순서가 항상 일정하지 않습니다.
답변 감사합니다^^
^^
댓글 달기