Выполнение `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 ваш файл и посмотрите на размер, и вы увидите

Другие вопросы по тегам