Что такое код yaz_errno

Содержание

yaz_errno

(PHP 4 >= 4.0.1, PECL yaz >= 0.9.0)

yaz_errno — Returns error number

Описание

Returns an error number for the server (last request) >id.

yaz_errno() should be called after network activity for each server — (after yaz_wait() returns) to determine the success or failure of the last operation (e.g. search).

Список параметров

The connection resource returned by yaz_connect() .

Возвращаемые значения

Returns an error code. The error code is either a Z39.50 diagnostic code (usually a Bib-1 diagnostic) or a client side error code which is generated by PHP/YAZ itself, such as «Connect failed», «Init Rejected», etc.

Смотрите также

  • yaz_error() — Returns error description
  • yaz_addinfo() — Returns additional error information

Что такое код yaz_errno

Допускаемые номера ошибок не равны нулю; значение errno никогда не устанавливается в ноль какими-либо системными вызовами или библиотечными функциями.

Некоторые системные вызовы или библиотечные функции (например, getpriority(2)), при успешном выполнении возвращают -1. В этих случаях успешность выполнения можно отличить от ошибки присвоив errno значение нуля перед вызовом, и затем, если вызов вернул состояние, которое может указывать на ошибку, проверить, равно ли errno ненулевому значению.

Переменная errno определена в стандарте ISO C как изменяемое lvalue int и не объявляемая явно; errno может быть и макросом. Переменная errno является локальным значением нити; её изменение в одной нити не влияет на её значение в другой нити.

Всем названиям ошибок, определённым в POSIX.1, должны соответствовать разные значения, за исключением EAGAIN и EWOULDBLOCK, которые могут быть одинаковыми.

Далее приведён список символических имён ошибок, определённых в Linux. Некоторые из них, отмеченные как POSIX.1, определены в POSIX.1-2001, а отмеченные как C99 — определены в C99.

E2BIG Слишком длинный список параметров (POSIX.1) EACCES Доступ запрещён (POSIX.1) EADDRINUSE Адрес уже используется (POSIX.1) EADDRNOTAVAIL Адрес недоступен (POSIX.1) EAFNOSUPPORT Семейство адресов не поддерживается (POSIX.1) EAGAIN Ресурс временно недоступен (значение может быть равным EWOULDBLOCK) (POSIX.1) EALREADY Соединение уже выполняется (POSIX.1) EBADE Некорректный обмен EBADF Неправильный дескриптор файла (POSIX.1) EBADFD Некорректное состояние дескриптора файла EBADMSG Неправильное сообщение (POSIX.1) EBADR Неверный дескриптор запроса EBADRQC Неверный код запроса EBADSLT Некорректный слот EBUSY Устройство или ресурс занято (POSIX.1) ECANCELED Операция отменена (POSIX.1) ECHILD Отсутствуют дочерние процессы (POSIX.1) ECHRNG Номер канала вне диапазона ECOMM Ошибка связи при отправке ECONNABORTED Соединение было прервано (POSIX.1) ECONNREFUSED В соединении отказано (POSIX.1) ECONNRESET Соединение сброшено другой стороной (POSIX.1) EDEADLK Предотвращена тупиковая ситуация при обращении к ресурсу (POSIX.1) EDEADLOCK Синоним EDEADLK EDESTADDRREQ Требуется указать адрес назначения (POSIX.1) EDOM Математический аргумент вне области определения функции (POSIX.1, C99) EDQUOT Превышена дисковая квота (POSIX.1) EEXIST Файл существует (POSIX.1) EFAULT Неправильный адрес (POSIX.1) EFBIG Файл слишком велик (POSIX.1) EHOSTDOWN Узел выключен EHOSTUNREACH Узел недоступен (POSIX.1) EIDRM Идентификатор удалён (POSIX.1) EILSEQ Недопустимая последовательность байт (POSIX.1, C99) EINPROGRESS Операция выполняется (POSIX.1) EINTR Прерванный вызов функции (POSIX.1); смотрите signal(7). EINVAL Неверный аргумент (POSIX.1) EIO Ошибка ввода/вывода (POSIX.1) EISCONN Сокет подключён (POSIX.1) EISDIR Это каталог (POSIX.1) EISNAM Является файлом именованного типа EKEYEXPIRED Ключ с истёкшим сроком EKEYREJECTED Ключ был отвергнут службой EKEYREVOKED Ключ был отозван EL2HLT Уровень 2 остановлен EL2NSYNC Уровень 2 не синхронизирован EL3HLT Уровень 3 остановлен EL3RST Уровень 3 остановлен ELIBACC Невозможно получить доступ к нужной общей библиотеке ELIBBAD Обращение к повреждённой общей библиотеке ELIBMAX Попытка компоновки с слишком большим количеством общих библиотек ELIBSCN Секция lib в a.out повреждена ELIBEXEC Невозможно непосредственно выполнить общую библиотеку ELOOP Слишком много уровней символьных ссылок (POSIX.1) EMEDIUMTYPE Неправильный тип носителя EMFILE Слишком много открытых файлов (POSIX.1); обычно, это из-за превышения ограничения ресурса RLIMIT_NOFILE, описанного в getrlimit(2) EMLINK Слишком много ссылок (POSIX.1) EMSGSIZE Сообщение слишком длинное (POSIX.1) EMULTIHOP Попытка Multihop (POSIX.1) ENAMETOOLONG Название файла слишком длинное (POSIX.1) ENETDOWN Сеть не работает (POSIX.1) ENETRESET Соединение прервано из-за сети (POSIX.1) ENETUNREACH Сеть недоступна (POSIX.1) ENFILE Слишком много открытых файлов в системе (POSIX.1); в Linux это, вероятно результат достижения ограничения /proc/sys/fs/file-max (смотрите proc(5)). ENOBUFS Недостаточно буферного пространства (POSIX.1 (часть XSI STREAMS)) ENODATA Сообщение в голове очереди чтения STREAM отсутствует (POSIX.1) ENODEV Нет такого устройства (POSIX.1) ENOENT Нет такого файла или каталога (POSIX.1)

Обычно, эта ошибка является результатом указания несуществующего пути или отсутствия одного из компонентов каталогов пути, или указанный путь является символической ссылкой на несуществующий объект.

ENOEXEC Ошибка формата выполняемого файла (POSIX.1) ENOKEY Требуемый ключ недоступен ENOLCK Нет доступных блокировок (POSIX.1) ENOLINK Соединение было разорвано (POSIX.1) ENOMEDIUM Носитель не найден ENOMEM Недостаточно места (POSIX.1) ENOMSG Нет сообщения желаемого типа (POSIX.1) ENONET Машина не в сети ENOPKG Пакет не установлен ENOPROTOOPT Протокол недоступен (POSIX.1) ENOSPC На устройстве не осталось места (POSIX.1) ENOSR Отсутствую ресурсы STREAM (POSIX.1 (часть XSI STREAMS)) ENOSTR Нет STREAM (POSIX.1 (часть XSI STREAMS)) ENOSYS Функция не реализована (POSIX.1) ENOTBLK Требуется блочное устройство ENOTCONN Сокет не подключён (POSIX.1) ENOTDIR Не каталог (POSIX.1) ENOTEMPTY Каталог не пуст (POSIX.1) ENOTSOCK Не сокет (POSIX.1) ENOTSUP Неподдерживаемая операция (POSIX.1) ENOTTY Неподходящая операция управления вводом/выводом (POSIX.1) ENOTUNIQ Имя не уникально в сети ENXIO Нет такого устройства или адреса (POSIX.1) EOPNOTSUPP Операция не поддерживается на сокете (POSIX.1)

(ENOTSUP и EOPNOTSUPP в Linux имеют одинаковые значения, но согласно POSIX.1 значения этих ошибок должны различаться.)

EOVERFLOW Значение слишком велико для хранения в таком типе данных (POSIX.1) EPERM Операция не позволена (POSIX.1) EPFNOSUPPORT Неподдерживаемое семейство протоколов EPIPE Обрыв канала (POSIX.1) EPROTO Ошибка протокола (POSIX.1) EPROTONOSUPPORT Протокол не поддерживается (POSIX.1) EPROTOTYPE Неподдерживаемый тип протокола для сокета (POSIX.1) ERANGE Результат слишком большой (POSIX.1, C99) EREMCHG Удалённый адрес был изменён EREMOTE Это удалённый объект EREMOTEIO Ошибка удалённого ввода/вывода ERESTART Прерванный системный вызов следует перезапустить EROFS Файловая система, доступная только для чтения (POSIX.1) ESHUTDOWN Невозможно отправить данные после выключения конечной точки передачи ESPIPE Недопустимое перемещение (POSIX.1) ESOCKTNOSUPPORT Неподдерживаемый тип сокета ESRCH Нет такого процесса (POSIX.1) ESTALE Неактуальный дескриптор файла (POSIX.1)

Эта ошибка может возникать в NFS и других файловых системах

ESTRPIPE Ошибка потоков канала ETIME Таймер истёк (POSIX.1 (часть XSI STREAMS))

(в POSIX.1 описывается как «в ioctl(2) истекло время ожидания STREAM»)

ETIMEDOUT Время ожидания соединения истекло (POSIX.1) ETXTBSY Текстовый файл занят (POSIX.1) EUCLEAN Структуру необходимо почистить EUNATCH Драйвер протокола не подсоединён EUSERS Слишком много пользователей EWOULDBLOCK Операция приведёт к блокировке (значение может быть равным EAGAIN) (POSIX.1) EXDEV Некорректная ссылка (POSIX.1) EXFULL Обмен полон

ЗАМЕЧАНИЯ

Раньше в Си было распространена практика определения errno вручную (т.е., extern int errno), вместо включения файла . Не делайте этого. Это не будет работать с современными версиями библиотеки Си. Однако, на (очень) старых системах UNIX файл может отсутствовать и определение необходимо.

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

yaz_errno — возвращает номер ошибки.

Описание

int yaz_errno (int id)

Возвращает ошибку для цели/target (последнего запроса). Возвращается положительное значение, если target возвращает код диагностики; нуль — если ошибок нет (успешно); отрицательное значение — для прочих ошибок (таких, когда target закрывает соединение, etc).

yaz_errno() должна вызываться после сетевой активности для каждой target — (после возвратов из yaz_wait() ) для определения успеха/облома последней операции (например, поиска).

Что такое код yaz_errno

yaz_errno — возвращает номер ошибки.

Описание

int yaz_errno (int id)

Возвращает ошибку для цели/target (последнего запроса). Возвращается положительное значение, если target возвращает код диагностики; нуль — если ошибок нет (успешно); отрицательное значение — для прочих ошибок (таких, когда target закрывает соединение, etc).

yaz_errno() должна вызываться после сетевой активности для каждой target — (после возвратов из yaz_wait() ) для определения успеха/облома последней операции (например, поиска).

Ошибка 400 Bad Request: что это означает и как ее исправить

Ошибка 400 ( Bad Request) – это код ответа HTTP , который означает, что сервер не смог обработать запрос, отправленный клиентом из-за неверного синтаксиса. Подобные коды ответа HTTP отражают сложные взаимоотношения между клиентом, веб-приложением, сервером, а также зачастую сразу несколькими сторонними веб-сервисами. Из-за этого поиск причины появления ошибки может быть затруднён даже внутри контролируемой среды разработки.

В этой статье мы разберём, что значит ошибка 400 Bad Request ( переводится как « Неверный запрос »), и как ее исправить

На стороне сервера или на стороне клиента?

Все коды ответа HTTP из категории 4xx считаются ошибками на стороне клиента. Несмотря на это, появление ошибки 4xx не обязательно означает, что проблема как-то связана с клиентом, под которым понимается веб-браузер или устройство, используемое для доступа к приложению. Зачастую, если вы пытаетесь диагностировать проблему со своим приложением, можно сразу игнорировать большую часть клиентского кода и компонентов, таких как HTML , каскадные таблицы стилей ( CSS ), клиентский код JavaScript и т.п. Это также применимо не только к сайтам. Многие приложения для смартфонов, которые имеют современный пользовательский интерфейс, представляют собой веб-приложения.

С другой стороны, ошибка 400 Bad Request означает, что запрос, присланный клиентом, был неверным по той или иной причине. Пользовательский клиент может попытаться загрузить слишком большой файл, запрос может быть неверно сформирован, заголовки HTTP запроса могут быть неверными и так далее.

Мы рассмотрим некоторые из этих сценариев ( и потенциальные решения ) ниже. Но имейте в виду: мы не можем однозначно исключить ни клиент, ни сервер в качестве источника проблемы. В этих случаях сервер является сетевым объектом, генерирующим ошибку 400 Bad Request и возвращающим её как код ответа HTTP клиенту, но возможно именно клиент ответственен за возникновение проблемы.

Начните с тщательного резервного копирования приложения

Важно сделать полный бэкап вашего приложения, базы данных и т.п. прежде , чем вносить какие-либо правки или изменения в систему. Ещё лучше, если есть возможность создать полную копию приложения на дополнительном промежуточном сервере, который недоступен публично.

Подобный подход обеспечит чистую тестовую площадку, на которой можно отрабатывать все возможные сценарии и потенциальные изменения, чтобы исправить или иную проблему без угрозы безопасности или целостности вашего « живого » приложения.

Диагностика ошибки 400 Bad Request

Ошибка 400 Bad Request означает, что сервер ( удалённый компьютер ) не может обработать запрос, отправленный клиентом ( браузером ), вследствие проблемы, которая трактуется сервером как проблема на стороне клиента.

Существует множество сценариев, в которых ошибка 400 Bad Request может появляться в приложении. Ниже представлены некоторые наиболее вероятные случаи:

  • Клиент случайно ( или намеренно ) отправляет информацию, перехватываемую маршрутизатором ложных запросов. Некоторые веб-приложения ищут особые заголовки HTTP , чтобы обрабатывать запросы и удостовериться в том, что клиент не предпринимает ничего зловредного. Если ожидаемый заголовок HTTP не найден или неверен, то ошибка 400 Bad Request – возможный результат.
  • Клиент может загружать слишком большой файл. Большинство серверов или приложений имеют лимит на размер загружаемого файла, Это предотвращает засорение канала и других ресурсов сервера. Во многих случаях сервер выдаст ошибку 400 Bad Request , когда файл слишком большой и поэтому запрос не может быть выполнен.
  • Клиент запрашивает неверный URL . Если клиент посылает запрос к неверному URL ( неверно составленному ), это может привести к возникновению ошибки 400 Bad Request .
  • Клиент использует недействительные или устаревшие куки. Это возможно, так как локальные куки в браузере являются идентификатором сессии. Если токен конкретной сессии совпадает с токеном запроса от другого клиента, то сервер/приложение может интерпретировать это как злонамеренный акт и выдать код ошибки 400 Bad Request .

Исправление проблем на стороне клиента

Ошибку 400 Bad Request ( попробуйте позже ) лучше начать с исправления на стороне клиента. Вот несколько советов, что следует попробовать в браузере или на устройстве, которые выдают ошибку.

Проверьте запрошенный URL

Наиболее частой причиной ошибки 400 Bad Request является банальный ввод некорректного URL . Доменные имена ( например, internet-technologies.ru ) нечувствительны к регистру, поэтому ссылка, написанная в смешанном регистре, такая как interNET-technologies.RU работает так же, как и нормальная версия в нижнем регистре internet-technologies.ru. Но части URL , которые расположены после доменного имени, чувствительными к регистру. Кроме случаев, когда приложение/сервер специально осуществляет предварительную обработку всех URL и переводит их в нижний регистр перед исполнением запроса.

Важно проверять URL на неподходящие специальные символы, которых в нем не должно быть. Если сервер получает некорректный URL , он выдаст ответ в виде ошибки 400 Bad Request .

Очистите соответствующие куки

Одной из потенциальных причин возникновения ошибки 400 Bad Request являются некорректные или дублирующие локальные куки. Файлы куки в HTTP – это небольшие фрагменты данных, хранящиеся на локальном устройстве, которые используются сайтами и веб-приложениями для « запоминания » конкретного браузера или устройства. Большинство современных веб-приложений использует куки для хранения данных, специфичных для браузера или пользователя, идентифицируя клиента и позволяя делать следующие визиты быстрее и проще.

Но куки, хранящие информацию сессии о вашем аккаунте или устройстве, могут конфликтовать с другим токеном сессии от другого пользователя, выдавая кому-то из вас ( или вам обоим ) ошибку 400 Bad Request .

В большинстве случаев достаточно рассматривать только ваше приложение в отношении файлов куки, которые относятся к сайту или веб-приложению, выдающему ошибку 400 Bad Request .

Куки хранятся по принципу доменного имени веб-приложения, поэтому можно удалить только те куки, которые соответствуют домену сайта, сохранив остальные куки не тронутыми. Но если вы не знакомы с ручным удалением определённых файлов куки, гораздо проще и безопаснее очистить сразу все файлы куки.

Это можно сделать разными способами в зависимости от браузера, который вы используете:

  • Google Chrome;
  • Internet Explorer;
  • Microsoft Edge;
  • Mozilla Firefox;
  • Safari.

Загрузка файла меньшего размера

Если вы получаете ошибку 400 Bad Request при загрузке какого-либо файла, попробуйте корректность работы на меньшем по размеру файле, Это включает в себя и «загрузки» файлов, которые не загружаются с вашего локального компьютера. Даже файлы, отправленные с других компьютеров, считаются «загрузками» с точки зрения веб-сервера, на котором работает ваше приложение.

Выйдите и войдите

Попробуйте выйти из системы и войти обратно. Если вы недавно очистили файлы куки в браузере, это приводит к автоматическому выходу из системы при следующей загрузке страницы. Попробуйте просто войти обратно, чтобы посмотреть, заработала ли система корректно.

Также приложение может столкнуться с проблемой, связанной с вашей предыдущей сессией, являющейся лишь строкой, которую сервер посылает клиенту, чтобы идентифицировать клиента при будущих запросах. Как и в случае с другими данными, токен сессии ( или строка сессии ) хранится локально на вашем устройстве в файлах куки и передаётся клиентом на сервер при каждом запросе. Если сервер решает, что токен сессии некорректен или скомпрометирован, вы можете получить ошибку 400 Bad Request .

В большинстве веб-приложений выход повторный вход приводит к перегенерации локального токена сессии.

Отладка на распространённых платформах

Если вы используете на сервере распространённые пакеты программ, которые выдают ошибку 400 Bad Request , изучите стабильность и функциональность этих платформ. Наиболее распространённые системы управления контентом, такие как WordPress , Joomla! и Drupal , хорошо протестированы в своих базовых версиях. Но как только вы начинаете изменять используемые ими расширения PHP , очень легко спровоцировать непредвиденные проблемы, которые выльются в ошибку 400 Bad Request .

Откатите последние изменения

Если вы обновили систему управления контентом непосредственно перед появлением ошибки 400 Bad Request , рассмотрите возможность отката к предыдущей версии, которая была установлена, как самый быстрый и простой способ убрать ошибку 400 bad request .

Аналогично, любые расширения или модули, которые были обновлены, могут вызывать ошибки на стороне сервера, поэтому откат к предыдущим версиям этих расширений также может помочь.

Но в некоторых случаях CMS не предоставляют возможности отката к предыдущим версиям. Так обычно происходит с популярными платформами, поэтому не бойтесь, если вы не можете найти простой способ вернуться к использованию старой версии той или иной программной платформы.

Удалите новые расширения, модули или плагины

В зависимости от конкретной CMS , которую использует приложение, имена этих компонентов будут различаться. Но во всех системах они служат одной и той же цели: улучшение возможностей платформы относительно её стандартной функциональности.

При этом имейте в виду, что расширения могут так или иначе получать полный контроль над системой, вносить изменения в код PHP , HTML , CSS , JavaScript или базу данных. Поэтому мудрым решением может быть удаление любых новых расширений, которые были недавно добавлены.

Проверьте непреднамеренные изменения в базе данных

Даже если удалили расширение через панель управления CMS , это не гарантирует, что внесенные им изменения были полностью отменены. Это касается многих расширений WordPress , которым предоставляется полный доступ к базе данных.

Расширение может изменить записи в базе данных, которые «не принадлежат» ему, а созданы и управляются другими расширениями ( или даже самой CMS ). В подобных случаях модуль может не знать, как откатить назад изменения, внесенные в записи базы данных.

Я лично сталкивался с такими случаями несколько раз. Поэтому лучшим путём будет открыть базу данных и вручную просмотреть таблицы и записи, которые могли быть изменены расширением.

Поиск проблем на стороне сервера

Если вы уверены, что ошибка 400 Bad Request не связана с CMS , вот некоторые дополнительные советы, которые могут помочь найти проблему на стороне сервера.

Проверка на неверные заголовки HTTP

Ошибка, которую вы получаете от приложения, является результатом недостающих или некорректных специальных заголовков HTTP , которые ожидает получить приложение или сервер. В подобных случаях нужно проанализировать заголовки HTTP , которые отправляются на сторону сервера.

Просмотрите логи

Почти любое веб-приложение будет вести логи на стороне сервера. Они представляют собой историю того, что делало приложение. Например, какие страницы были запрошены, к каким серверам оно обращалось, какие результаты предоставлялись из базы данных и т.п.

Логи сервера относятся к оборудованию, на котором выполняется приложение, и зачастую представляют собой детали о статусе подключённых сервисов или даже о самом сервере. Поищите в интернете “ логи [ИМЯ_ПЛАТФОРМЫ] ”, если вы используете CMS , или “ логи [ЯЗЫК_ПРОГРАММИРОВАНИЯ] ” и “ логи [ОПЕРАЦИОННАЯ_СИСТЕМА] ”, если у вас собственное приложение, чтобы получить подробную информацию по поиску логов.

Отладьте код приложения или скриптов

Если это не помогло, проблема может быть в исходном коде, который выполняется внутри приложения. Попытайтесь диагностировать, откуда может исходить проблема, отлаживая приложение вручную и параллельно просматривая логи приложения и сервера.

Создайте копию всего приложения на локальном устройстве для разработки и пошагово повторите тот сценарий, который приводил к возникновению ошибки 400 Bad Request . А затем просмотрите код приложения в тот момент, когда что-то пойдёт не так.

Независимо от причины возникновения ошибки, даже если вам удалось исправить её в этот раз, появление в вашем приложении такой проблемы — это сигнал для того, чтобы внедрить инструмент обработки ошибок, который поможет автоматически обнаруживать их и оповещать в момент возникновения.

Данная публикация представляет собой перевод статьи « 400 Bad Request Error What It Is and How to Fix It » , подготовленной дружной командой проекта Интернет-технологии.ру

Константы errno errno Constants

Синтаксис Syntax

Примечания Remarks

Значения errno — это константы, присваиваемые параметру errno при возникновении различных ошибок. The errno values are constants assigned to errno in the event of various error conditions.

ERRNO.H содержит определения для значений errno. ERRNO.H contains the definitions of the errno values. Однако не все определения, приведенные в ERRNO.H, используются в 32-разрядных операционных системах Windows. However, not all the definitions given in ERRNO.H are used in 32-bit Windows operating systems. Некоторые значения в ERRNO.H присутствуют для поддержки совместимости с операционными системами семейства UNIX. Some of the values in ERRNO.H are present to maintain compatibility with the UNIX family of operating systems.

Значения errno в 32-разрядной операционной системе Windows являются подмножеством значений errno в системах XENIX. The errno values in a 32-bit Windows operating system are a subset of the values for errno in XENIX systems. Поэтому значение errno не всегда совпадает с фактическим кодом ошибки, который возвращает системный вызов из операционной системы Windows. Thus, the errno value is not necessarily the same as the actual error code returned by a system call from the Windows operating systems. Чтобы получить фактический код ошибки операционной системы, используйте переменную _doserrno, которая содержит это значение. To access the actual operating system error code, use the _doserrno variable, which contains this value.

Поддерживаются следующие значения errno: The following errno values are supported:

Константа Constant Описание Description
ECHILD ECHILD Нет порожденных процессов. No spawned processes.
EAGAIN EAGAIN Нет больше процессов. No more processes. Попытка создать новый процесс завершилась ошибкой, поскольку больше нет слотов для процессов, недостаточно памяти или достигнут максимальный уровень вложенности. An attempt to create a new process failed because there are no more process slots, or there is not enough memory, or the maximum nesting level has been reached.
E2BIG E2BIG Список аргументов слишком длинный. Argument list too long.
EACCES EACCES В разрешении отказано. Permission denied. Настройка разрешений файла не допускает указанный доступ. The file’s permission setting does not allow the specified access. Эта ошибка означает, что предпринята попытка доступа к файлу (или, в некоторых случаях, к каталогу) способом, который несовместим с атрибутами файла. This error signifies that an attempt was made to access a file (or, in some cases, a directory) in a way that is incompatible with the file’s attributes.

Например, ошибка может возникнуть при попытке чтения из файла, который не был открыт, при попытке записи в файл, который предназначен только для чтения, или при попытке открыть не файл, а каталог. For example, the error can occur when an attempt is made to read from a file that is not open, to open an existing read-only file for writing, or to open a directory instead of a file. В операционной системе MS-DOS версии 3.0 и более поздних ошибка EACCES может также указывать на нарушение блокировки или общего доступа. Under MS-DOS operating system versions 3.0 and later, EACCES may also indicate a locking or sharing violation.

Ошибка может также возникать при попытке переименовать файл или каталог или при попытке удалить существующий каталог. The error can also occur in an attempt to rename a file or directory or to remove an existing directory.

EBADF EBADF Неверный номер файла. Bad file number. Возможны две причины: 1) Указанный дескриптор файла не является допустимым значением или не относится к открытому файлу. There are two possible causes: 1) The specified file descriptor is not a valid value or does not refer to an open file. 2) Предпринята попытка записи в файл или устройство, которые были открыты только для чтения. 2) An attempt was made to write to a file or device opened for read-only access.
EDEADLOCK EDEADLOCK Может произойти взаимоблокировка ресурсов. Resource deadlock would occur. Аргумент математической функции не находится в домене этой функции. The argument to a math function is not in the domain of the function.
EDOM EDOM Математический аргумент. Math argument.
EEXIST EEXIST Файлы существуют. Files exist. Предпринята попытка создать файл, который уже существует. An attempt has been made to create a file that already exists. Например, в вызове функции _open указаны флаги _O_CREAT и _O_EXCL, но названный файл уже существует. For example, the _O_CREAT and _O_EXCL flags are specified in an _open call, but the named file already exists.
EILSEQ EILSEQ Недопустимая последовательность байтов (например, в строке в многобайтовой кодировке (MBCS)). Illegal sequence of bytes (for example, in an MBCS string).
EINVAL EINVAL Недопустимый аргумент. Invalid argument. Для одного из аргументов функции указано недопустимое значение. An invalid value was given for one of the arguments to a function. Например, значение, заданное как начальное положение указателя файла (посредством вызова функции fseek), находится до начала файла. For example, the value given for the origin when positioning a file pointer (by means of a call to fseek) is before the beginning of the file.
EMFILE EMFILE Слишком много открытых файлов. Too many open files. Нет доступных дескрипторов файлов, поэтому невозможно открыть дополнительные файлы. No more file descriptors are available, so no more files can be opened.
ENOENT ENOENT Отсутствует такой файл или каталог. No such file or directory. Указанные файл или каталог не существуют или их не удалось найти. The specified file or directory does not exist or cannot be found. Это сообщение может выводиться, если указанный файл не существует или компонент пути не соответствует существующему каталогу. This message can occur whenever a specified file does not exist or a component of a path does not specify an existing directory.
ENOEXEC ENOEXEC Ошибка формата исполняемого файла. Exec format error. Предпринята попытка выполнения файла, который не является исполняемым или имеет недопустимый формат исполняемого файла. An attempt was made to execute a file that is not executable or that has an invalid executable-file format.
ENOMEM ENOMEM Недостаточно памяти. Not enough core. Недостаточно памяти для выполнения запрошенного оператора. Not enough memory is available for the attempted operator. Например, это сообщение может возникнуть, если не хватает памяти для выполнения дочернего процесса или не может быть удовлетворен запрос на выделение памяти в вызове _getcwd. For example, this message can occur when insufficient memory is available to execute a child process, or when the allocation request in a _getcwd call cannot be satisfied.
ENOSPC ENOSPC На устройстве не осталось места. No space left on device. На устройстве нет больше доступного для записи места (например, при полном заполнении диска). No more space for writing is available on the device (for example, when the disk is full).
ERANGE ERANGE Результат слишком большой. Result too large. Аргумент математической функции слишком велик, что приведет к частичной или полной потере значимости результата. An argument to a math function is too large, resulting in partial or total loss of significance in the result. Эта ошибка может также возникать в других функциях, если значение аргумента превышает ожидаемое значение (например, слишком длинный аргумент buffer при вызове _getcwd). This error can also occur in other functions when an argument is larger than expected (for example, when the buffer argument to _getcwd is longer than expected).
EXDEV EXDEV Ссылка между устройствами. Cross-device link. Предпринята попытка переместить файл на другое устройство (с помощью функции rename). An attempt was made to move a file to a different device (using the rename function).
STRUNCATE STRUNCATE Копирование или объединение строк привело к усечению строки. A string copy or concatenation resulted in a truncated string. См. _TRUNCATE. See _TRUNCATE.

Для обеспечения совместимости с POSIX поддерживаются следующие значения. The following values are supported for compatibility with Posix. Они необходимы в системах, отличных от POSIX. They are required values on non-Posix systems.

Сравнительная таблица кодов и расшифровок errno для различных юниксов?

Дамы и господа, потерял я недавно одну очень удобную штуку :(

А именно — таблицу, в которой были сведены воедино распространенные коды системных ошибок с расшифровками (из errno.h) для самых ходовых *nix-совместимых осей — Linux, BSD, AIX, Solaris, HP-UX как минимум.

Попытки загуглить ее ни к чему не привели, что заставляет задуматься о собственной вменяемости, профпригодности и т.п.

Ценность такой таблицы в том, что стандарт POSIX задает только символьные имена-аббревиатуры ошибок (ENOMEM, типа), а не коды, которые различаются от оси к осе. А масса разборчивого в друзьях ПО выдает в логах не расшифровку и даже не символьный код, а тупо числовой код…

Разбирая на изолированной станции гиговую пачку логов инцидента с сильно гетерогенной связки ПО на разных осях, без такой таблицы перед глазами приходится совершать много лишних движений. Типа, увидел 79 — а пока читаешь лог, сиди вспоминай, что на AIX это Connection Refused, когда на соляре и линухе Connection Refused это 146, а на хпуксе — 239.

Естественно, всегда можно найти в сети errno.h от каждой из нужных осей, распарсить, свести воедино, проверить на примерах и отредактировать, но это работа не на один час, а данная чудо-табличка уже была с авторскими комментариями, отформатированная и т.д., и даже влезала на А4, кажется.

По популярности «та самая» таблица должна быть как Rosetta Stone for Unix, посему и прошу Вашей помощи.

Вдруг у кого чудо-табличка завалялась?

Ну, а если не найдется — все равно оставляйте пожелания, займусь тогда составлением сам.

4.3.1. Значения errno

4.3.1. Значения errno

Стандарт POSIX 2001 определяет большое число возможных значений для errno. Многие из них относятся к сетям, IPC или другим специальным задачам. Справочная страница для каждого системного вызова описывает возможные значения errno , которые могут иметь место; поэтому вы можете написать код для проверки отдельных ошибок и соответствующим образом обработать их, если это нужно. Возможные значения определены через символические имена. Предусмотренные GLIBC значения перечислены в табл. 4.1.

Таблица 4.1. Значения GLIBC для errno

Имя Значение
E2BIG Слишком длинный список аргументов
EACCESS Доступ запрещен
EADDRINUSE Адрес используется
EADDRNOTAVAIL Адрес недоступен
EAFNOSUPPORT Семейство адресов не поддерживается
EAGAIN Ресурс недоступен, попытайтесь снова (может быть то же самое значение, что EWOULDBLOCK ).
EALREADY Соединение уже устанавливается
EBADF Ошибочный дескриптор файла.
EBADMSG Ошибочное сообщение.
EBUSY Устройство или ресурс заняты
ECANCELED Отмена операции.
ECHILD Нет порожденного процесса.
ECONNABORTED Соединение прервано
ECONNFRFUSED Соединение отклонено
ECONNRESET Восстановлено исходное состояние соединения.
EDEADLK Возможен тупик (deadlock) в запросе ресурса.
EDESTADDRREQ Требуется адрес назначения
EDOM Математический аргумент выходит за область определения функции
EDQUOT Зарезервировано.
EEXIST Файл существует.
EFAULT Ошибочный адрес.
EFBIG Файл слишком большой.
EHOSTUNREACH Хост недоступен.
EIDRM Идентификатор удален
EILSEQ Ошибочная последовательность байтов.
EINPROGRESS Операция исполняется.
EINTR Прерванная функция.
EINVAL Недействительный аргумент.
EIO Ошибка ввода/вывода.
EISCONN Сокет (уже) соединен.
EISDIR Это каталог.
ELOOP Слишком много уровней символических ссылок.
EMFILE Слишком много открытых файлов.
EMLINK Слишком много ссылок.
EMSGSIZE Сообщение слишком длинное.
EMULTIHOP Зарезервировано.
ENAMETOOLONG Имя файла слишком длинное
ENETDOWN Сеть не работает
ENETRESET Соединение прервано сетью
ENETUNREACH Сеть недоступна.
ENFILE В системе открыто слишком много файлов.
ENOBUFS Буферное пространство недоступно.
ENODEV Устройство отсутствует
ENOENT Файл или каталог отсутствуют
ENOEXEC Ошибочный формат исполняемого файла.
ENOLCK Блокировка недоступна.
ENOLINK Зарезервировано.
ENOMEM Недостаточно памяти.
ENOMSG Сообщение нужного типа отсутствует
ENOPROTOOPT Протокол недоступен.
ENOSPC Недостаточно памяти в устройстве.
ENOSYS Функция не поддерживается.
ENOTCONN Сокет не соединен.
ENOTDIR Это не каталог
ENOTEMPTY Каталог не пустой.
ENOTSOCK Это не сокет
ENOTSUP Не поддерживается
ENOTTY Неподходящая операция управления вводом/выводом
ENXIO Нет такого устройства или адреса.
EOPNOTSUPP Операция сокета не поддерживается
EOVERFLOW Слишком большое значение для типа данных
EPERM Операция не разрешена
EPIPE Канал (pipe) разрушен
EPROTO Ошибка протокола.
EPROTONOSUPPORT Протокол не поддерживается
EPROTOTYPE Ошибочный тип протокола для сокета
ERANGE Результат слишком большой
EROFS Файловая система только для чтения
ESPIPE Недействительный поиск
ESRCH Нет такого процесса
ESTALE Зарезервировано
ETIMEDOUT Тайм-аут соединения истек
ETXTBSY Текстовый файл занят
EWOULDBLOCK Блокирующая операция (может быть то же значение, что и для EAGAIN )
EXDEV Ссылка через устройство (cross-device link)

Многие системы предоставляют также другие значения ошибок, а в более старых системах может не быть всех перечисленных значений ошибок. Полный список следует проверить с помощью справочных страниц intro(2) и errno(2) для локальной системы.

ЗАМЕЧАНИЕ. errno следует проверять лишь после того, как возникла ошибка и до того, как сделаны дальнейшие системные вызовы. Начальное значение той переменной 0. Однако, в промежутках между ошибками ничто не изменяет ее значения, это означает, что успешный системный вызов не восстанавливает значение 0. Конечно, вы можете вручную установить ее в 0 в самом начале или когда захотите, однако это делается редко.

Сначала мы используем errno лишь для сообщений об ошибках. Для этого имеются две полезные функции. Первая — perror() :

void perror(const char *s);

Функция perror() выводит предоставленную программой строку, за которой следует двоеточие, а затем строка, описывающая значение errno :

if (some_system_call(param1, param2)

perror(«system call failed»);

Мы предпочитаем функцию strerror() , которая принимает параметр со значением ошибки и возвращает указатель на строку с описанием ошибки:

char *strerror(int errnum);

strerror() предоставляет для сообщений об ошибках максимальную гибкость, поскольку fprintf() дает возможность выводить ошибки любым нужным нам способом, наподобие этого.

if (some_system_call(param1, param2)

fprintf(stderr, «%s: %d, %d: some_system_call failed: %s «,

argv[0], param1, param2, strerror(errno));

По всей книге вы увидите множество примеров использования обеих функций.

yaz_errno

yaz_errno — возвращает номер ошибки.

Описание

int yaz_errno (int id)

Возвращает ошибку для цели/target (последнего запроса). Возвращается положительное значение, если target возвращает код диагностики; нуль — если ошибок нет (успешно); отрицательное значение — для прочих ошибок (таких, когда target закрывает соединение, etc).

yaz_errno() должна вызываться после сетевой активности для каждой target — (после возвратов из yaz_wait() ) для определения успеха/облома последней операции (например, поиска).

Как узнать, что означает «errno»?

При вызове execl(. ) я получаю errno=2 . Что это значит? Как я могу узнать значение этого errno ?

Вы можете использовать strerror() , чтобы получить удобочитаемую строку для номера ошибки. Это та же строка, напечатанная perror() , но она полезна, если вы форматируете сообщение об ошибке для чего-то другого, кроме стандартного вывода ошибки.

Linux также поддерживает явно-потоковый вариант strerror_r() .

Вместо запуска perror для любого кода ошибки, который вы получаете, вы можете получить полный список значений errno в вашей системе с помощью следующего однострочного файла:

cpp -dM /usr/include/errno.h | grep ‘define E’ | sort -n -k 3

В Linux есть также очень аккуратный инструмент, который может сразу сказать, что означает каждый код ошибки. На Ubuntu: apt-get install errno .

Затем, если вы хотите, например, получить описание типа ошибки 2, просто введите errno 2 в терминал.

С errno -l вы получаете список со всеми ошибками и их описаниями. Гораздо проще, что другие методы, упомянутые в предыдущих плакатах.

Здесь вывод из errno -l переформатирован для удобства чтения:

Я использовал tabularise в Vim для выравнивания столбцов:

Код ошибки 2 означает «Файл/Каталог не найден». В общем, вы можете использовать функцию perror для печати удобочитаемой строки.

Есть несколько полезных функций для работы с errno s. (Чтобы это было ясно, они встроены в libc — я просто предоставляю примеры реализации, потому что некоторые люди находят код чтения более четким, чем чтение английского.)

strerror возвращает строку, описывающую номер ошибки, который вы передали ему. Осторожно, это не является поточным или прерывистым; можно переписать строку и вернуть один и тот же указатель на следующий вызов. Используйте strerror_r , если вам нужно об этом беспокоиться.

perror выводит сообщение, которое вы даете ему, плюс строку, описывающую текущую errno , стандартную ошибку.

Это быстрее, чем поиск кода в errno.h , короче, чем большинство решений, размещенных здесь, и не требует установки сторонних инструментов:

Илон Маск рекомендует:  Акселератор от HTML Academy
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL