我知道我可以使用:
$ my_program > output.txt
将输出重定向到文件,但我遇到的问题是,当文件达到 64 时,Kb
文件中不再写入任何内容,并且我会丢失接下来的所有信息......
我能做些什么?
答案1
检查 的输出ulimit -f
。您可能会受到当前文件限制值的限制。如果是这样,您可以通过运行来消除限制ulimit -f unlimited
。
答案2
shell 使用一些内部限制。在 bash(您正在使用的 shell)中,该命令ulimit
用于列出它们(-a 代表所有):
$ ulimit -a
>
然而,即使“管道大小”(重定向 ( ) 或管道 ( )的限制)设置|
为较低值,在此 Linux 系统中为 8 (-p),流的大小可能会通过管道发送的数据可能会很大(超过 1000 万字节):
$ 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
然而,即使上面设置的非常小的值也不会限制管道中的流。上面的命令在超过 1000 万字节的情况下仍然有效。
原因是限制适用于什么一块可以转移。
你需要一个这样的工具混合 perl 和 bash 的脚本获得写入一堵塞。
$ ./pipesize 128 1
write size: 128; bytes successfully before error: 4096
这显示了管道的实际限制(与重定向中的限制相同)。