inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 IPC 프로그래밍 - 이론과 실습

- Live Programming(named pipe)

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

1423

젓인

작성한 질문수 158

0

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

linux

답변 1

0

런잇(ProgCoach4U)

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에 성공하게 됩니다. 다만 한쪽만 열려있는 경우가 발생할 수 있기 때문에 데이터 처리에 유의하셔야겠죠 :)

fork() 후 address

0

40

2

bind(): Address already in use

0

59

2

POSIX named semaphore 자원이 제대로 해지되지 못한 상태로 프로세스가 종료됐을 때 해당 semaphore 재사용 방법

0

216

2

강의 순서

0

262

1

강의자료 질문

0

244

1

수업 관련 질문

0

354

3

안녕하세요! 메세지 큐 방식에 대해 질문있습니다.

0

268

1

리눅스는 디버깅이 없나요?

1

722

1

fcntl 에서 Read/Write 기능

1

354

1

시스템 프로그래밍 향후 공부

1

507

1

Shared Memory와 동기화 관련

1

1182

1

거의 모든 함수를 static 선언하시는 이유는 무엇인가요?

1

2328

1

SHM_REMAP

1

318

2

recvfrom 질문

1

715

6

컴파일 질문입니다

1

675

1

partial send/recv에 관하여

1

670

1

스레드끼리의 통신에도 적용가능한가요?

1

375

1

File Lock API - 정리 table에서 multi-thread 사용가능시....

1

412

1

WSL Ubuntu에서 메시지 큐

1

464

1

shared memory(14강) live programming file mapping 에 관한 질문입니다.

1

205

1

에러 - bind(): Address already in use

1

1138

1

POSIX MQ의 설정 문의

1

604

2

accept 함수에 대한 문의

1

295

1

datagram socket 구현시 recvfrom에서 블록킹됩니다.

1

1507

1