Я не хочу выбирать имя; все, что меня волнует, - это получение уникальной очереди сообщений, так же, как я бы использовал очереди сообщений SYSV с IPC_PRIVATE
Что ж, с очередями сообщений POSIX, вы do должны указать имя, но вам не нужно ни его сохранять, ни позволять другим использовать ту же очередь с этим именем.
IPC_PRIVATE Мимикрия
Делайте то, что mkstemp
и tmpfile
делают под капотом. Заимствуйте любой из алгоритмов выбора имени «tmp» / «temp», чтобы сгенерировать что-то «/ разумно_уникальное», mq_open
it O_CREAT | O_EXCL, а затем mq_unlink
it. Затем дочерние рабочие процессы могут наследовать дескриптор очереди сообщений.
Предостережение: может ли root или ваш EUID стать мошенником выяснить, что вы делаете, и прыгнуть между mq_open
и mq_unlink
? Да.
Альтернативная реализация
В качестве альтернативы используйте взамен SOCK_DGRAM socketpair
или pipe
. Они предлагают семантику, аналогичную очередям сообщений POSIX & mdash; attr.mq_msgsize
становится SO_SNDBUF / SO_RCVBUF или соглашением о соблюдении PIPE_BUF, mq_notify
становится возможностью выбора ввода / вывода (вероятно, уже имеет место) & mdash; хотя вы теряете приоритеты сообщений.