Quando um pipe nomeado é criado, via mkfifo (ou qualquer outra coisa que você possa fazer), ele cria um "arquivo" de pipe que permanece no lugar até ser removido (ou, em alguns casos, até que sua máquina seja reinicializada, se você se esquece de removê - lo). Você pode criar seu próprio pipe nomeado com o mkfifo simplesmente, pois são necessários poucos argumentos, assim:
host # mkfifo -m 777 /tmp/corncob
Isso é tudo o que é preciso para criar o pipe nomeado / tmp / corncob. O sinalizador -m, usado para definir as permissões, não é necessário. Geralmente, se você não incluí-lo, o conjunto de permissões padrão para um novo pipe nomeado será o padrão para o seu sistema. Como uma outra nota lateral, você também pode passar o sinalizador -m e definir permissões alfa, em vez de octal, como:
host # mkfifo -m a=rwx /tmp/corncob
para criar exatamente a mesma coisa. Você pode excluir o pipe nomeado da mesma forma que exclui um arquivo. rm, e ele se foi.
Uma coisa que você deve notar sobre pipes nomeados é que eles geralmente (até onde eu vi) só são capazes de passar completamente um fluxo de entrada / saída por si mesmos de cada vez. Ou seja, se você tiver um processo enviando entrada para o pipe nomeado e dois processando a leitura a partir dele, apenas um dos processos de leitura receberá a saída. Deve-se notar, também, que, se tal situação existir, uma vez que o processo original que está recebendo a saída sai, o outro processo começará a receber a saída do canal nomeado (se ainda estiver tentando ler a partir dele). Isso foi uma frase muito longa ou estou apenas digitando rápido? ;)
Um exemplo do que eu quero dizer abaixo:
host-term1 # while :;do echo a b c d e >/tmp/corncob;sleep 15;done
host-term2 # tail -f /tmp/corncob
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
host-term3 # tail -f /tmp/corncob
host-term2 # ^C
host-term3 #
^C
a b c d e
a b c d e
a b c d e
a b c d e