linux stdbuf - a opção stdin com buffer de linha não existe

6

A página man do comando stdbuf indica que o modo de buffer de linha é inválido como uma opção de buffer de entrada padrão. Qual é o motivo disso?

tail -f access.log | stdbuf -iL cut -d' ' -f1 | uniq

stdbuf: line buffering stdin is meaningless
Try 'stdbuf --help' for more information.
    
por iruvar 24.07.2012 / 21:11

2 respostas

6

Simplificado, o stdbuf é um wrapper em torno da funcionalidade do stdio. O buffer de linha dos fluxos de entrada é indefinido no stdio; Não consigo encontrar nenhum documento de padrões que diga o que isso significa, por isso é literalmente sem sentido no que diz respeito aos padrões.

Assumindo comportamento análogo ao buffer de linha stdout, o buffer de linha de stdin exigiria a chamada read () uma vez para cada caractere lido, porque não há outra maneira de garantir que você não leia além de uma nova linha em um descritor. Como o ponto de armazenamento em buffer é reduzir o número de chamadas do sistema, não é surpresa que a biblioteca stdio não implemente isso.

    
por 24.07.2012 / 22:25
6

Como o autor do stdbuf me permite direcioná-lo para a seção "problemas de buffer de entrada do stdio" no link

    
por 25.07.2012 / 14:03