Por quanto tempo os FIFOs (pipes nomeados) permanecem “abertos”?

4

Por exemplo, eu tenho um script que escreve o tempo em um pipe em / etc / pipe. Escreve continuamente em um loop de tempo real. Por quanto tempo os dados no pipe estarão disponíveis para leitura? Se eu apenas decidir ler o pipe um dia depois com cat / etc / pipe, vou obter todos os valores de tempo desde o momento que comecei a escrever?

Por outro lado, e se o meu loop só escrevesse a hora a cada 10 minutos? Conseguirei acessar tudo um dia depois?

Por fim, finja que meu loop escreve o tempo continuamente (como meu primeiro exemplo) e eu leio o pipe a cada 30 minutos. Se meu computador for desligado logo antes de eu ler o pipe, o pipe estará vazio quando eu reiniciar ou ele armazenará todos esses dados?

    
por n0pe 02.08.2011 / 17:32

1 resposta

6

O processo será capaz de escrever PIPE_BUF bytes (veja linux/limits.h ) no pipe. Então ficará preso, até que alguns dos dados sejam lidos.

Os dados armazenados em buffer serão mantidos contanto que pelo menos uma extremidade do canal esteja aberta - não há "tempo limite" ou algo assim. Os buffers são mantidos na memória, no entanto, e não persistem na reinicialização.

Veja a pipe(7) página de manual, especialmente a seção "Capacidade de tubulação", para mais informações.

A pipe has a limited capacity. If the pipe is full, then a write(2) will block or fail, depending on whether the O_NONBLOCK flag is set (see below).

[...] Since Linux 2.6.11, the pipe capacity is 65536 bytes.

    
por 02.08.2011 / 17:41