2009-12-05 3 views
2

유닉스 IPC를 배우고 있으며, 책의 msg * 패밀리에 대해서만 이야기합니다. 그러나 맨 페이지를 탐색하면서 mq_에 해당하는 내용을 알게되었습니다. http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0650/bks/SGI_Developer/books/T_IRIX_Prog/sgi_html/ch06.html은이 둘의 차이점을 설명하지만, 구현에 따라 그 차이가 어느 정도인지는 잘 모르겠습니다. 한 가족을 다른 가족보다 더 많이 사용해야하는 이유가 있습니까? 둘 중 하나가 다른 것보다 "더"좋습니까?msgsnd 또는 mq_send를 사용해야합니까?

답변

4

mq_* 함수는 POSIX 함수입니다. msg* 기능은 일반적으로 'System V IPC'로 알려져 있습니다 (공유 메모리 및 세마포어가 포함 된 UNIX System V에서 소개 된 IPC 기능의 일부이기 때문에). 나는 msg* 함수가 POSIX과 X/Open 표준에 더 많이 포함되어 있다고 생각하는 것이 적절하다고 생각합니다. 그 (것)들에게 불의를 할지도 모르지만, 표준은 동일한 결과를 달성하는 다수 방법을 피하는 것을 시도한다. 그들은 POSIX의 원래 버전에서 그들 중 누구도 아니었다.

코드를 이식 할 위치를 고려해야합니다. 나는 그들이 사용하는 모든 곳에서 사용할 수 있다면 더 현대적인 mq_* 기능을 사용할 것을 제안 할 것이다. - 나는 그들 자신을 사용하지는 않았지만. 일반적으로 msg* 함수는 공유 메모리 및 세마포어 함수보다 자주 사용되지 않지만이 인터페이스는 POSIX보다 길기 때문에 (10 년 이상) 더 광범위하게 사용할 수 있습니다.

+0

와우, msg * 함수는 POSIX가 아니므로? 내 책은 "POSIX : XSI"메시지 대기열이라고 ... – Steven

+0

다시 브랜딩이라고 생각합니다. ;) – Duck

+1

POSIX에서 - 그들은 POSIX (그들은 POSIX를 pre-date했다.)에서 시작하지 않았다. 그리고 책은 POSIX : XSI라는 레이블을 붙이는 것이 옳습니다. –

1

일반적으로 더 넓은 범위의 플랫폼으로 이식 할 수 있어야하므로 POSIX 버전을 사용해보십시오.

주요 차이점은 메시지가 빈 큐에 놓일 때 POSIX 큐에서 신호를 생성하거나 새 스레드를 생성 할 수 있다는 것입니다. 또한 POSIX 대기열은 항상 가장 높은 우선 순위의 가장 오래된 메시지를 반환합니다. SysV 대기열은 지정한 우선 순위의 메시지를 반환 할 수 있습니다.

모두의 주행 거리는 다양하지만 일반적으로 SYSV 나 SysV IPC보다 POSIX 인터페이스가 직관적이고 덜 기발합니다.

관련 문제