Ошибки · Решение
Linux errno EBADF: что означает и как исправить
Операция получила недействительный файловый дескриптор или дескриптор неподходящего режима.
Короткий ответ
В Linux errno EBADF означает «Bad file descriptor». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.
Что означает ошибка
Операция получила недействительный файловый дескриптор или дескриптор неподходящего режима.
Возможные причины
- Дескриптор уже был закрыт.
- Код использует неинициализированное или переиспользованное значение fd.
- Для операции требуется чтение/запись, а descriptor открыт в несовместимом режиме.
Что проверить
- Проследите open/dup/close для конкретного fd через strace.
- Проверьте lifetime descriptor между потоками и обработчиками ошибок.
- Убедитесь, что fd не закрывается дважды и не используется после close.
Безопасные шаги
- Сделайте владение descriptor однозначным.
- После close помечайте переменную недействительной в прикладном коде.
- Исправьте режим открытия или используйте отдельный descriptor для требуемой операции.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если errno EBADF воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.
Похожие ошибки
- /errors/linux-errno-esrch/
- /errors/linux-errno-eintr/
- /errors/linux-errno-eio/
Что учитывать
Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.
Официальный источник
Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.