msgsnd에서 IPC_NOWAIT flag

미해결질문
ProgCoach4U 프로필
ProgCoach4U 4달 전

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

ProgCoach4U 프로필
ProgCoach4U 4달 전

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

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

 

유영재 프로필
유영재 4달 전

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

유영재 프로필
유영재 4달 전

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