• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

msgsnd에서 IPC_NOWAIT flag

19.06.03 17:33 작성 조회수 460

0

IPC_NOWAIT 플래그는 만일 메세지 큐가 생기지 않았다면 blocking을 계속 한다는 말인가요?

답변 4

·

답변을 작성해보세요.

0

유영재님의 프로필

유영재

질문자

2019.06.04

아.... man page를 꼼꼼히 읽겠습니다

0

유영재님의 프로필

유영재

질문자

2019.06.03

아 제가 질문 마지막에 실수를..... 아 버퍼쪽 블로킹이구나 ㅎㅎㅎㅎ

0

앗.. msgsnd의 IPC_NOWAIT 플래그에 대한 질문이었네요. read-side 쪽의 설명을 드렸네요..ㅠㅠ

msgsnd에서 IPC_NOWAIT 플래그의 의미 역시 non-blocking으로 동작하겠다는 의미입니다. IPC_NOWAIT플래그가 없는 경우, msgsnd 시 버퍼에 여유 공간이 없으면(=꽉 차있으면) 버퍼가 필요한 양만큼 비워질 때까지 blocking 됩니다. 반면, IPC_NOWAIT 플래그가 설정된 경우 위와 같은 상황이라면 바로 에러 리턴을 합니다. msgsnd()의 경우 -1을 리턴하면서 errno가 EAGAIN으로 설정됩니다. 

 

0

IPC_NOWAIT 플래그는 blocking하지 않겠다는 의미 입니다. 결국 non-blocking mode로 동작하겠다는 의미이지요. 그래서 메시지 큐에 메시지가 없는데 read를 했을 때 blocking 되지 않고(=기다리지 않고) 바로 return을 합니다. 이것이 non-blocking mode의 동작 입니다.