Eu usei o mkfifo <file>
comando para criar FIFOs nomeados, onde um processo grava no arquivo e outro processo lê do arquivo.
Agora, eu sei que o mknod
comando é capaz de criar pipes nomeados. Esses pipes nomeados são equivalentes aos FIFOs criados pelo mkfifo
, ou eles têm recursos diferentes?
Sim, é equivalente, mas obviamente apenas se você disser
mknod
para realmente criar um FIFO, e não um bloco ou dispositivo de caractere (raramente feito hoje em dia, pois o devtmpfs/udev faz isso por você).Nele
strace
é idêntico para ambos os comandos:Então, em termos de syscalls,
mkfifo
é na verdade uma abreviação demknod
.A maior diferença, então, está na semântica. Com
mkfifo
você pode criar um monte de FIFOs de uma só vez:Com
mknod
, como você precisa especificar o tipo, ele só aceita um argumento:Em geral,
mknod
pode ser difícil de usar corretamente. Então, se você quiser trabalhar com FIFO, fique commkfifo
.Eles são equivalentes, exceto nas bordas extremas da portabilidade.
mknod ... p
era originalmente a única maneira de criar pipes nomeados, mas o POSIX optou por omiti-lo e inventá-lomkfifo
, presumivelmente porque os pipes nomeados são um conceito inerentemente mais portátil do que todas as outras coisasmknod
podem fazer com dispositivos e seus números maiores e menores. Amknod
chamada do sistema também foi deixada de fora das primeiras versões do POSIX.Então, para portabilidade para UNIX antigo,
mknod ... p
é melhor. Para sistemas modernos,mkfifo
é um pouco melhor, embora seja bastante improvável que você encontre um unix moderno real ondemknod ... p
não funcione.