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
.
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?
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
.
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).
Tags output io shell terminal io-redirection