fifo open시 O_NONBLOCK이 언제 의미가 있나요?

미해결질문
유영재 프로필

I/O multiplexing 때 의미가 있나요? open 밑에 sleep 코드를 작성해도 open에서 찾지 못하면 바로 끝나는 것 같습니다

 

    printf("call open()\n");
    fd = open(FIFO_FILENAME, O_WRONLY | O_NONBLOCK);
    if (fd < 0) {
        perror("open()");
        return -1;
    }
    strncpy(buf, "hello", sizeof(buf));
    write(fd, buf, strlen(buf));
    close(fd);
ProgCoach4U 프로필
ProgCoach4U 2019.05.30

blocking/non-blocking mode는 read/write 시에 동작을 다르게 합니다. blocking mode로 open한 파일 디스크립터에 read()를 한다고 했을 때, 읽을 데이터가 있으면 바로 읽어가고, 읽을 데이터가 없는 경우 읽을 데이터가 있을 때까지 blocking 하여 기다립니다. 반면 non-blocking mode로 open한 파일 디스크립터에 read()를 한다고 했을 때, 읽을 데이터가 있으면 바로 읽어가고, 읽을 데이터가 없는 경우에는 바로 -1을 리턴합니다. 이 경우 errno가 EAGAIN으로 설정됩니다.  

named pipe의 경우 blocking mode로 open하게 되면 read-side/write-side 모두 open이 될 때까지 blocking 됩니다. 양쪽 다 열려야 비로소 열리게 되는 것이죠. 하지만 non-blocking mode로 open하게 되면 다른 한쪽이 열려있지 않더라도 open에 성공하게 됩니다. 다만 한쪽만 열려있는 경우가 발생할 수 있기 때문에 데이터 처리에 유의하셔야겠죠 :)

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스