n1ro°
RU

Ошибки · Решение

Linux errno EBADF: что означает и как исправить

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

Редакция N1RO · Проверено

Короткий ответ

В Linux errno EBADF означает «Bad file descriptor». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.

Что означает ошибка

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

Возможные причины

  • Дескриптор уже был закрыт.
  • Код использует неинициализированное или переиспользованное значение fd.
  • Для операции требуется чтение/запись, а descriptor открыт в несовместимом режиме.

Что проверить

  • Проследите open/dup/close для конкретного fd через strace.
  • Проверьте lifetime descriptor между потоками и обработчиками ошибок.
  • Убедитесь, что fd не закрывается дважды и не используется после close.

Безопасные шаги

  1. Сделайте владение descriptor однозначным.
  2. После close помечайте переменную недействительной в прикладном коде.
  3. Исправьте режим открытия или используйте отдельный descriptor для требуемой операции.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если errno EBADF воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.

Похожие ошибки

  • /errors/linux-errno-esrch/
  • /errors/linux-errno-eintr/
  • /errors/linux-errno-eio/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.