Выполнение `cat` приводит к` значению, слишком большому для определенной ошибки типа данных`
Я выполнил cat для файла в /proc/(pid)/map и получил ошибку Value too large for defined data type error
Конечно, файл является двоичным, и я предполагаю, что это не лучшая идея для вывода двоичного файла в терминал, но я фактически перенаправил вывод в команду tr, чтобы преобразовать двоичный файл в простой текст.
Это не происходит на всех файлах карты. Только несколько.
Мне любопытно, почему кошка выдаст такую ошибку.
Моя система представляет собой солярис 10, работающий на Sun Fire V890.
2 ответа
Из руководства:
Слишком большое значение для определенного типа данных
причина
Идентификатор пользователя или группы для объекта IPC или объекта файловой системы был слишком велик, чтобы его можно было сохранить в соответствующем элементе структуры, предоставляемой вызывающим абонентом.
действие
Запустите приложение на более новой системе или попросите автора программы исправить это условие.
Технические примечания
Эта ошибка возникает только в системах, которые поддерживают больший диапазон значений идентификатора пользователя или группы, чем заявленная структура члена. Это условие обычно возникает из-за того, что объект IPC или файловой системы находится на удаленной машине с более значительным значением типа uid_t, off_t или gid_t, чем у локальной системы. Символическое имя для этой ошибки: EOVERFLOW, errno=79.
Или, другими словами, код, запрашивающий данные с использованием структуры с 32-битными значениями, когда исходные данные являются 64-битными, а фактические значения выше, чем те, которые могут уместиться в 32-битных.
Технически другой ответ правильный. Но то, что происходит, cat
пытается открыть файл, который вы пытаетесь прочитать, и вызывает (f)stat
в этом и заключается проблема (вы можете увидеть это, запустив strace cat <file>
).
Вы работаете в 32-битной операционной системе, что означает, что если размер вашего файла больше, чем этот (2^31) байт, это всегда будет происходить (то есть, если он не помещается в 32-битное целое число со знаком). Пробовать ls -l
ваш файл и посмотрите на размер, и вы увидите