Должен ли я использовать msgsnd или mq_send? - PullRequest
2 голосов
/ 05 декабря 2009

Я изучаю Unix 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 описывает некоторые различия между ними, но я не уверен, насколько это зависит от реализации. Есть ли веские причины использовать одну семью над другой? Один из них «лучше» другого?

Ответы [ 2 ]

4 голосов
/ 05 декабря 2009

Функции mq_* являются функциями POSIX. Функции msg* взяты из того, что обычно известно как «System V IPC» (поскольку они являются частью средства IPC, представленного в UNIX System V, которая также включала совместную память и семафоры). Я думаю, что было бы справедливо сказать, что функции msg* включены в стандарт POSIX и X / Open в большей степени из-за обратной совместимости, чем из-за того, что в противном случае было бы желательно; это может сделать их несправедливыми, но обычно стандарты стараются избежать нескольких способов достижения одного и того же результата. Они не были ни в одной из оригинальных версий POSIX.

Вам нужно подумать, куда вы будете переносить свой код. Я бы предложил использовать более современные mq_* функции, если они доступны везде, где вам нужно - хотя я сам ими не пользовался. Вообще говоря, функции msg* использовались реже, чем функции совместно используемой памяти и семафоров, но этот интерфейс был (на десять и более лет) длиннее, чем POSIX, поэтому он мог бы быть более доступным.

1 голос
/ 05 декабря 2009

Как правило, вы должны стараться использовать версии POSIX, когда это возможно, поскольку они должны быть более переносимыми для более широкого диапазона платформ.

Основные различия заключаются в том, что очереди POSIX могут генерировать сигнал или порождать новый поток, когда сообщения помещаются в пустую очередь. Очереди POSIX также всегда возвращают самое старое сообщение с наивысшим приоритетом; очереди SysV могут возвращать сообщение с любым указанным вами приоритетом.

Дистанция у всех будет разной, но я считаю, что интерфейс POSIX более интуитивно понятен и менее причудлив, чем SYSV или SysV IPC в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...