Я знаю, что могу использовать:
$ my_program > output.txt
Для перенаправления вывода в файл, но проблема в том, что когда файл достигает 64 Кб
, в файл больше ничего не записывается, и я теряю всю информацию, которая идет дальше...
Что я могу сделать?
Оболочка использует некоторые внутренние ограничения. В bash (оболочке, которую вы используете) для их перечисления используется команда ulimit
(-a для всех):
$ ulimit -a
перенаправление (>
) или канал (|
) -- на низкое значение, 8 (-p) в этой системе Linux, размер потока, который может быть отправлен через канал может быть довольно большим (более 10 миллионов байт):
$ printf '%0*d' 11000111 0 | wc -c
11000111
Другое ограничение, реальное, применимое к каналу, считывается из:
$ cat /proc/sys/fs/pipe-max-size
65536
И устанавливается в том же файле:
$ sudo echo $((4 * 1024)) > /proc/sys/fs/pipe-max-size
Однако, даже совсем небольшое значение, как указано выше, не ограничивает поток в трубе. Приведенная выше команда с более чем 10 миллионами байт все еще работает.
Причина в том, что ограничение применяется к тому, что может передать одинблок.
Вам нужен такой инструмент, как этот скрипт, который смешивает perl и bashдля записи одногоблока.
$ ./pipesize 128 1
write size: 128; bytes successfully before error: 4096
Это показывает реальный лимит для канала (тот же лимит, что и при перенаправлении).
Проверьте вывод ulimit -f
. Вы можете быть ограничены текущим предельным значением файла. Если это так, вы можете удалить свой лимит, запустив ulimit -f unlimited
.