Назад | Перейти на главную страницу

выполнение `cat` приводит к` Значение слишком велико для ошибки определенного типа данных`

Я выполнил 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-битных.