Вопрос по c, linux – почему нет механизма опроса / выбора как для очереди сообщений?

2

Как мы можем сделать, опросить / epoll / select на FD, мы не можем на MSG ID очереди. Я нашел несколько нестандартных способов сделать msgqueue-id для fd, но, в конце концов, он нестандартный. Итак, мой вопрос, почему Linux Linux не реализовал опрос / выборку по идентификатору очереди сообщений? Это приводит к серьезной проблеме?

Мне нужно реализовать такой механизм. Как я могу это сделать ?

Привет товарищ. Вы получили какой-либо прогресс в своем вопросе? Я использую ядро PowerPC 2.4, у которого нет очередей POSIX, и я хотел бы иметь возможность использоватьselect() на это тоже. JaxWR
Какая у вас веская причина для использования sysv MQ? Их немного, но если вы их не используете, то нет причин использовать реализацию sysv. Duck

Ваш Ответ

4   ответа
13

mq_overview справочная страница:

Polling message queue descriptors

On Linux, a message queue descriptor is actually a file descriptor, and can be monitored using select(2), poll(2), or epoll(7). This is not portable.

Так что выcan использованиеpoll и друзья в очереди сообщений - просто убедитесь, что вы используете современный вариант.

Спасибо за ответ, но я говорил об очередях сообщений sys-V. и вы abt posix MSG очереди. JohnG
1

что это не просто работает, но если это не так, я подозреваю, что причина состоит в том, чтобы избегать поощрения такой непереносимой практики. Хотя дескрипторам очереди сообщений разрешено быть файловыми дескрипторами, они не обязательно должны быть такими, и код, который предполагает, что они являются файловыми дескрипторами (и, таким образом, занимают то же самое «пространство номеров»), является непереносимым.

Если вам нужны файловые дескрипторы, вам, вероятно, было бы лучше просто использовать Unix-сокеты или какой-то другой механизм вместо очередей сообщений. Похоже, что очереди сообщений предназначены для программирования в реальном времени с потоками, в которыхselect/pollоснованный на событиях ввод-вывод обычно не используется.

1

енного типа сообщения или для любого типа сообщения с использованием IPC_WAIT. Poll / epoll / select используются для того, чтобы помочь вам написать управляемую событиями программу, в которой пользовательское приложение не тратит циклы опроса процессора на конкретное событие и оставляет его на усмотрение ядра. Это то, чего вы также можете достичь, используя SysV msg Q.

1

can использоваться сselect/poll в линуксе Сверх того,mq_notify () предоставляет вам опции для получения сигнала или создания нового потока, когда пустой MQ получает сообщение. Это еще один способ избежать блокировки или опроса.

Похожие вопросы