O pipe nomeado modifica o sistema de arquivos?

3

como título. Se eu criar um pipe nomeado e, em seguida, ler / escrever nele, o sistema de arquivos em que o pipe nomeado reside será afetado? Ou seja os dados são armazenados em buffer no sistema de arquivos até serem lidos ou residem apenas na memória?

    
por michelemarcon 01.07.2013 / 15:59

2 respostas

4

O próprio objeto de arquivo é criado no sistema de arquivos, mas nenhum dado é armazenado em um sistema de arquivos. Do mkpipe (3) manpage:

   A  FIFO special file is similar to a pipe, except that it is created in
   a different way.  Instead of being an anonymous communications channel,
   a  FIFO  special  file  is  entered  into  the  file  system by calling
   mkfifo().

Sobre a única vez que os dados podem ser armazenados no disco é durante a hibernação quando a memória é gravada no espaço de troca, incluindo buffers - no entanto, isso é um caso de canto.

    
por 01.07.2013 / 16:07
4

Não. A gravação em um pipe nomeado não modifica o sistema de arquivos (exceto para tempos de acesso).

Aqui está uma demonstração:

$ mkdir test
$ mkdir test-ro
$ mkfifo test/fifo
$ mount --bind test test-ro
$ mount -o remount,ro test-ro
$ cat test/fifo & echo something >> test/fifo
something

Como você pode ver, mesmo que o fifo estivesse em um sistema de arquivos somente para leitura, nós pudemos escrever nele.

Os pipes nomeados não armazenam nenhum dado canalizado no sistema de arquivos. Seus dados são armazenados em buffer na memória, separados dos buffers do sistema de arquivos.

    
por 01.07.2013 / 16:05