“文件可能被截断。至少需要 %ld 大小,但大小为 %ld”。任何人都可以帮助我了解如何调用此消息吗?我在尝试收集内核跟踪时看到此消息。谁能解释为什么在我尝试收集内核跟踪时会发生这种情况?
我注意到的另一件事是,当我第一次看到上述消息时尝试收集内核跟踪。当我再次尝试立即收集时,我能够收集日志。但是当我在 > 5 分钟后再次尝试收集时,我看到了上述消息。
好吧,这就是当您尝试一次性获取/收集大量信息时内核的行为。
话虽如此,在您的情况下,您需要再次调用您所做的操作,以便内核了解您确实想要显示那些巨大的信息。这就是您能够在第二次尝试中收集内核跟踪的原因。
如果没记错的话,你实际上在做的是调用read()系统调用,它将尝试从 fd 读取字节并将其计数到从 buf 开始的缓冲区中。
正如您可以从 Linux 内核源代码中读取read_write.crw_verify_area
一样,该函数不喜欢巨大的counts
. 因此,它将它们限制int
在一般情况下。所以它不必一直进行范围检查。
TL;博士
你得到的不是错误,很可能它是一个功能,不让内核努力从用户错误地打开大文件。这个限制是由rw_verify_area
Linux 内核中的函数创建的。因此,它旨在至少调用两次read系统调用来获取您的数据。