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