Linux 中将程序输出保存到文件的限制

Linux 中将程序输出保存到文件的限制

我知道我可以使用:

$ 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

这显示了管道的实际限制(与重定向中的限制相同)。

相关内容