인프런 커뮤니티 질문&답변

유영재님의 프로필 이미지

작성한 질문수

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

- Live Programming(SysV Message Queue)

msgsnd에서 IPC_NOWAIT flag

19.06.03 17:33 작성

·

628

0

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

답변 4

0

유영재님의 프로필 이미지
유영재
질문자

2019. 06. 04. 00:00

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

0

유영재님의 프로필 이미지
유영재
질문자

2019. 06. 03. 23:56

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

0

런잇(ProgCoach4U)님의 프로필 이미지
런잇(ProgCoach4U)
지식공유자

2019. 06. 03. 23:47

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

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

 

0

런잇(ProgCoach4U)님의 프로필 이미지
런잇(ProgCoach4U)
지식공유자

2019. 06. 03. 23:43

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