Estoy trabajando en una aplicación paralela simple en la que deseo utilizar un único proceso para mantener la información de estado sobre una familia de procesos de trabajo. Parece relativamente fácil configurar una cola de mensajes POSIX en la que todas las abejas trabajadoras pueden enviar actualizaciones periódicas al mantenedor de estado. ¿Mi problema? Una cola de mensajes POSIX debe tener un nombre. No quiero elegir un nombre; lo único que me importa es obtener una cola de mensajes única, de forma muy similar a como usaría colas de mensajes SYSV con IPC_PRIVATE
. Para un único nombre de archivo podría usar mkstemp(3)
o para un descriptor de archivo abierto único podría usar tmpfile(3)
. ¿Cómo debo obtener una cola de mensajes POSIX única?¿Cómo obtener una cola de mensajes POSIX única?
Respuesta
no quiero escoger un nombre; todo lo que importa es conseguir una única cola de mensajes, tanto como lo haría el uso de colas de mensajes SYSV con IPC_PRIVATE
Bueno, con colas de mensajes POSIX, hace necesario especificar un nombre, pero no tiene para preservarlo ni permitir que otros usen la misma cola con ese nombre.
IPC_PRIVATE mímica
Haz lo mkstemp
y tmpfile
lo hacen bajo el capó. Pida prestado cualquiera de los algoritmos de selección de nombre "tmp"/"temp" para generar algo "/ reasonably_unique", mq_open
O_CREAT | O_EXCL, y luego mq_unlink
. Los procesos de trabajo infantil pueden heredar el descriptor de la cola de mensajes.
Advertencia: ¿Podría root o su EUID ido pícaro averiguar lo que está haciendo y saltar entre el mq_open
y el mq_unlink
? Sí.
implementación alternativa
alternativa, puede utilizar un SOCK_DGRAM socketpair
o pipe
su lugar. Los que ofrecen una semántica similar a las colas de mensajes POSIX — attr.mq_msgsize
se convierte en SO_SNDBUF/SO_RCVBUF o un acuerdo para respetar PIPE_BUF, mq_notify
se convierte en la capacidad de selección de E/S (probablemente ya sea el caso) — aunque se pierde la priorización de mensajes.
- 1. Editar mensajes de MSMQ en una cola
- 2. pensamiento de cola de mensajes
- 3. Procesos de un único remitente y múltiples receptores que usan cola de mensajes posix en Linux
- 4. Boost Message Queue no está basado en cola de mensajes POSIX? Imposible seleccionar (2)?
- 5. Sistema de cola de mensajes
- 6. ¿Hay una forma mejor de contar los mensajes en una cola de mensajes (MSMQ)?
- 7. RabbitMQ-- recuperación selectiva de mensajes de una cola
- 8. Java Posix IPC ¿Hay una API?
- 9. ¿Cola de mensajes basada en Memcache?
- 10. Recuperar mensajes de la (s) cola (s) de RabbitMQ
- 11. Múltiples mensajes de iPhone APN, conexión única
- 12. cómo obtener el tamaño de la cola de mensajes de un actor de Akka?
- 13. Cohete múltiple de un solo lector cola única de fifo
- 14. SetWindowsHookEx ser utilizado con una cola de mensajes ventanas
- 15. Tratando con la duplicación en una cola de mensajes
- 16. ¿Herramienta para publicar mensajes de prueba en una cola JMS?
- 17. ¿Para qué ha utilizado colas de mensajes sysv/posix?
- 18. NServiceBus: Cómo mover mensajes de la cola de errores
- 19. Cómo purgar/eliminar mensajes de la cola weblogic JMS
- 20. ¿Por qué RabbitMQ no persiste mensajes en una cola duradera?
- 21. ¿Cómo marcar una matriz en POSIX sh?
- 22. ¿Cómo puedo obtener una parte única de hash en Perl?
- 23. ¿Cómo obtener el nombre de una restricción única en postgresql?
- 24. ¿Cómo obtener espacio de disco total disponible en sistemas Posix?
- 25. GLib's GAsyncQueue vs. POSIX message_queue
- 26. ¿Cómo puedo hacer una cola de prioridad de valor única en Python?
- 27. POSIX comportamiento de la señal
- 28. XMPP framework - Cómo obtener mensajes de grupo
- 29. ¿Cómo obtener una clave única para dos campos con Hibernate?
- 30. ¿Cuán profunda es la cola de mensajes de Win32?