Por que um pipe nomeado não é excluído após a reinicialização do sistema?

5

Tanto quanto eu entendo, pipes nomeados não são gravados no disco, mas são armazenados na memória. Aqui está como eu criei um pipe nomeado -

$ mkfifo pipe21
$ grep "simple" SimpleDoc.txt > pipe21 &
[1] 2775
$ cat pipe21
Very simple doc that contains plaintext. 
[1]+  Done                    grep --color=auto "simple" SimpleDoc.txt > pipe21

Depois disso, reiniciei meu sistema. No entanto, mesmo após o reinício, vejo pipe21 no meu diretório atual. Por que isso?

    
por CodeBlue 24.07.2013 / 18:08

2 respostas

9

Não, eles são gravados no disco. O comando mkfifo pipe21 cria o dispositivo correspondente em seu sistema de arquivos. Muitas vezes esses dispositivos são mantidos em /dev , mas os pipes nomeados (ou seja, FIFOS) não precisam necessariamente ser mantidos nesse diretório.

trecho do artigo da wikipedia

The named pipe can be deleted just like any file:
$ rm my_pipe

Exemplo

Faça um FIFO:

$ pwd
/home/saml

$ mkfifo pipe21

Confira o dispositivo FIFO:

$ ls -l | grep pipe
prw-rw-r--   1 saml saml        0 Jul 24 12:22 pipe21

$ file pipe21 
pipe21: fifo (named pipe)

Excluir o dispositivo:

$ rm pipe21 

$ ls -l | grep pipe

Referências

por 24.07.2013 / 18:13
11

Um pipe nomeado faz parte do sistema de arquivos. Qualquer coisa que tenha um nome de arquivo faz parte do sistema de arquivos. Se isso acontecer de ser um sistema de arquivos no armazenamento persistente (ou seja, no disco), ele sobrevive à reinicialização do sistema.

Uma entrada do sistema de arquivos para um canal nomeado tem apenas um nome, os metadados usuais (hora, permissões, etc.) e um sinalizador que diz “este é um canal nomeado”. Os dados que passam pelo pipe não vão para o sistema de arquivos. Mas o próprio pipe nomeado está no sistema de arquivos.

    
por 25.07.2013 / 03:43

Tags