| Anterior | Siguiente |
| ENOEXEC | ECHILD |
EBADF
Qué significa EBADF
EBADF significa que el número de descriptor no representa un recurso utilizable por esa llamada. Puede no haberse inicializado, haber sido cerrado, o estar abierto con un modo incompatible: por ejemplo, un descriptor abierto solo para escritura no sirve para read(). Las API que reciben un descriptor de directorio también pueden devolverlo si el dirfd no es válido.
En código asíncrono o multihilo, una causa especialmente peligrosa es un error de ciclo de vida: un hilo cierra el descriptor mientras otro todavía cree ser su propietario. Como los números de descriptor se reutilizan, el mismo entero puede acabar apuntando después a un recurso completamente distinto.
Qué comprobar
- Registra dónde se abre, duplica, transfiere y cierra el descriptor, junto con el componente o hilo propietario.
- Comprueba qué exige la API: lectura, escritura, posicionamiento, directorio, socket, dispositivo u otra semántica específica.
- Define un único responsable del cierre o sincroniza explícitamente la transferencia de propiedad y el tiempo de vida.
- No repitas la llamada con el mismo número hasta verificar que sigue identificando el recurso esperado.
Referencias técnicas
¿Buscas un código diferente? Buscar otro código de estado o error.