执行“cat”会导致“值对于定义的数据类型错误来说太大”

执行“cat”会导致“值对于定义的数据类型错误来说太大”

我对 /proc/(pid)/map 中的文件执行了 cat 并收到错误 Value too large for defined data type error

当然,该文件是二进制的,我认为将二进制文件输出到终端并不是最好的主意,但我实际上是将输出重定向到 tr 命令以将二进制文件转换为纯文本。

并非所有地图文件都会发生这种情况。只有少数地图文件会发生这种情况。

我很好奇为什么 cat 会发出这样的错误。

我的系统是在 Sun Fire V890 上运行的 Solaris 10 系统。

答案1

来自手册:

对于定义的数据类型来说值太大

原因

IPC 对象或文件系统对象的用户 ID 或组 ID 太大,无法存储在调用者提供的结构的适当成员中。

行动

在较新的系统上运行该应用程序,或要求程序作者修复此情况。

技术说明

此错误仅发生在支持的用户或组 ID 值范围大于声明的成员结构所能支持的系统上。这种情况通常是因为 IPC 或文件系统对象驻留在远程计算机上,并且其 uid_t、off_t 或 gid_t 类型的值大于本地系统的值。此错误的符号名称为 EOVERFLOW,errno=79。

或者换句话说:当源数据是 64 位并且实际值高于 32 位所能容纳的值时,代码使用具有 32 位值的结构请求数据。

答案2

从技术上讲,另一个答案是正确的。但是正在发生的事情是cat尝试打开您尝试读取的文件,并调用 ,而(f)stat这正是问题所在(您可以通过运行 来查看strace cat <file>)。

您使用的是 32 位操作系统,这意味着如果您的文件大小大于该值 (2^31) 字节,这种情况将始终发生(即如果它不适合有符号的 32 位整数)。尝试打开ls -l您的文件并查看其大小,您会看到

相关内容