这个问题可能看起来重复。但我没有得到我正在寻找的答案。
问题是,在 unix 中,4GL 二进制文件之一是使用游标从表中获取数据并将数据写入 .txt 文件中。该表包含大约 5000 万条记录。二进制文件花了很多时间并且没有完成。该.txt
文件也是0字节。
我想知道为什么记录没有写入.txt
文件的可能性。
注意:有足够的可用磁盘空间。此外,对于 3000 万条记录,我可以按预期获取 .txt 文件中的数据。
您提供的信息不足以确定文件未写入的原因。
在 UNIX 中,文本文件就像任何其他文件一样 - 字节的集合。没有对“行大小”或“行数”强制执行特定限制(或结构),尽管很明显,某些程序可能对最大支持的行大小等有某些限制(取决于它们的实现)。
当程序开始将数据写入文件时(即第一次刷新内部缓冲区时),文件将不再是零大小,因此很明显,您的 binqary 一直在做其他事情(除非它将文件清除为清理的一部分)。
尝试通过运行您的可执行文件strace
来查看文件 I/O 活动——这将为正在发生的事情提供一些线索。
如果您正在使用写入器写入文件,请尝试关闭写入器。它实现了关闭资源和刷新缓冲区剩余内容的双重目的。
如果您使用任何缓冲写入器机制,则需要刷新 CPU 计算的输出。我遇到过几次这样的情况,几乎在所有情况下,问题都是刷新输出的问题。
特别是在 java 中,通常写入数据的最佳实践涉及缓冲区。因此,当达到缓冲区限制时,它会被写入文件,但在尚未达到缓冲区末尾时不会被写入文件。当程序关闭而不刷新缓冲写入器时会发生这种情况。
所以,在你的情况下,如果它所花费的处理时间是合理的并且输出仍然不在文件上,这可能意味着输出已经计算并放在 RAM 上但无法写入文件(这代表磁盘),因为输出没有被刷新。
你也可以考虑这个问题的答案。