Existem várias perguntas aqui:
- Onde estão os arquivos dos elementos listados em ipcs?
Depende. As filas são visíveis em um sistema de arquivos virtual.
De mq_overview (7):
Mounting the message queue file system
On Linux, message queues are created in a virtual file system. (Other implementations may also provide such a feature, but
the details are likely to differ.) This file system can be mounted (by the superuser) using the following commands:
# mkdir /dev/mqueue
# mount -t mqueue none /dev/mqueue
Memória compartilhada (shm_overview (7))
Accessing shared memory objects via the file system
On Linux, shared memory objects are created in a (tmpfs) virtual file system, normally mounted under /dev/shm. Since kernel
2.6.19, Linux supports the use of access control lists (ACLs) to control the permissions of objects in the virtual file sys-
tem.
Semáforos (sem_visualização (7))
Accessing named semaphores via the file system
On Linux, named semaphores are created in a virtual file system, normally mounted under /dev/shm, with names of the form
sem.somename. (This is the reason that semaphore names are limited to NAME_MAX-4 rather than NAME_MAX characters.)
Since Linux 2.6.19, ACLs can be placed on files under this directory, to control object permissions on a per-user and per-
group basis.
- Por que os pipes nomeados criados por
mkfifo
não estão listados em ipcs
?
Eu não tenho certeza sobre isso, então só vou dar minha opinião e não uma resposta. Minha hipótese é que, como eles estão presentes no sistema de arquivos real, como os sockets, não são gerenciados da mesma maneira que o kernel gerencia segmentos de memória compartilhada e filas de mensagens.
- Como os pipes nomeados criados pelo mkfifo são diferentes da mensagem
filas criadas por ipcmk?
A principal diferença entre um pipe e uma fila de mensagens é que um pipe é apenas um canal de comunicação entre dois processos. Funciona no nível do byte. Você pode ler e escrever da maneira que quiser, e você tem que projetar o protocolo de comunicação. Eles são FIFOs estritos: um byte escrito antes do outro sempre será lido antes no outro extremo.
Uma fila de mensagens lida com mensagens e não com bytes. E geralmente, eles são menos estritamente FIFO. Depende da implementação, mas eles podem suportar um mecanismo de prioridade entre as mensagens.
De certa forma, as filas de mensagens fornecem mais funcionalidades, mas você pode, se quiser, implementar FIFOs com filas de mensagens e vice-versa.