Limite ao salvar a saída do programa no arquivo no Linux

0

Eu sei que posso usar:

$ my_program > output.txt

Para redirecionar a saída para um arquivo, mas o problema que tenho é que quando o arquivo atinge 64 Kb não mais é escrito no arquivo e perco toda a informação que vem a seguir ...

O que posso fazer?

    
por OiciTrap 18.06.2017 / 17:30

2 respostas

0

Verifique a saída de ulimit -f . Você pode estar limitado pelo valor atual do limite de arquivo. Nesse caso, você pode remover seu limite executando ulimit -f unlimited .

    
por 18.06.2017 / 19:01
0

O shell usa alguns limites internos. No bash (o shell que você está usando) o comando ulimit é usado para listá-los (-a para todos):

$ ulimit -a

No entanto, mesmo que o "tamanho do canal" esteja definido - o limite para um redirecionamento ( > ) ou um canal ( | ) - para um valor baixo, 8 (-p) neste linux sistema, o tamanho do fluxo que poderia ser enviado através de um pipe pode ser bastante grande (mais de 10 milhões de bytes):

$ printf '%0*d' 11000111 0 | wc -c
11000111

O outro limite, e o verdadeiro que se aplica a um pipe, é lido de:

$ cat /proc/sys/fs/pipe-max-size
65536

E defina no mesmo arquivo:

$ sudo echo $((4 * 1024)) > /proc/sys/fs/pipe-max-size

No entanto, mesmo um valor muito pequeno, como definido acima, não limita um fluxo em um pipe. O comando acima com mais de 10 milhões de bytes ainda funciona. A razão é que o limite é aplicado ao que um bloco poderia transferir.

Você precisa de uma ferramenta como esta script que mistura perl e bash para obter gravações de um bloco.

$ ./pipesize 128 1
write size:        128; bytes successfully before error: 4096

Isso mostra o limite real de um pipe (o mesmo limite de um redirecionamento).

    
por 19.06.2017 / 01:15