Tengo un FILE *
, devuelto por una llamada al fopen()
. Necesito obtener un descriptor de archivo para hacer llamadas como fsync(fd)
. ¿Cuál es la función para obtener un descriptor de archivo desde un puntero de archivo?¿Cómo puedo convertir un puntero de archivo (FILE * fp) a un descriptor de archivo (int fd)?
Respuesta
La función correcta es int fileno(FILE *stream)
. Se puede encontrar en <stdio.h>
, y es un estándar POSIX pero no es estándar.
Estrictamente hablando, no habría ninguna necesidad de mencionar encabezados o bibliotecas si la función era de hecho una parte del estándar Biblioteca C Sin embargo, no es estándar, por lo que podría tener sentido mencionar el encabezado al menos. – AnT
El acceso a las funciones en la biblioteca C estándar requiere incluir encabezados, al menos si su compilador espera prototipos (nunca recuerdo qué comportamiento estándar es en ese sentido). Sin encabezados, no se definen nombres al principio de un archivo C. – Novelocrat
@Novelocrat: no quise decir que no hay necesidad de '#incluir' nada. Simplemente quise decir que siempre es fácil encontrar el nombre del encabezado adecuado para una función * estándar *. Es decir. no es realmente crítico mencionar el nombre exacto del encabezado en la respuesta. – AnT
Incluso si fileno(FILE *)
puede devolver un descriptor de archivo, tenga MUCHO cuidado de no pasar por alto el búfer de stdio. Si hay datos de búfer (ya sean leídos o no), las lecturas/escrituras del descriptor de archivo pueden dar resultados inesperados.
Para contestar una de las preguntas laterales, para convertir un descriptor de archivo a un puntero de archivo, utilice fdopen(3)
No creo que esto haya sido útil para las personas que buscan esto específicamente, y esto ya se ha respondido en la sección de comentarios de la publicación de OP un mes antes de que se escribiera. Esto es más una aclaración lógica que una información real. – kevr
- 1. ¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?
- 2. ¿Cómo obtener una secuencia FILE * desde un descriptor de archivo?
- 3. ¿Fopen crea un descriptor de archivo?
- 4. Cómo acceder al descriptor de archivo de Open File
- 5. ¿Cómo puedo obtener un nombre de archivo de un descriptor de archivo dentro de un módulo kernel?
- 6. ¿Cómo puedo encontrar un nombre de archivo, dado un puntero ARCHIVO?
- 7. Función similar a "fprintf" para descriptores de archivos (es decir, int fd en lugar de FILE * fp)
- 8. extraer el archivo HANDLE del descriptor de archivo de Windows o de FILE *
- 9. ¿Cuánta información se almacena realmente en un descriptor de archivo?
- 10. En Kotlin ¿Cómo puedo convertir un int? a un Int
- 11. descriptor de archivo de un std :: fstream
- 12. ¿Cómo puedo eliminar un archivo señalado por un ARCHIVO * en C?
- 13. C: ¿cómo puedo cambiar del descriptor de archivo a FILE struct y viceversa?
- 14. Cómo volver a abrir un descriptor de archivo cerrado
- 15. ¿Cómo verificar si un descriptor de archivo tiene datos disponibles?
- 16. java: cómo convertir un archivo a utf8
- 17. ¿Cómo se puede vaciar una escritura usando un descriptor de archivo?
- 18. ¿Cómo puedo convertir un archivo JAR en un archivo EXE?
- 19. ¿Cómo determinar si un descriptor de archivo es buscable?
- 20. El uso de un descriptor de archivo numerado desde Java
- 21. llamada del sistema para asignar la memoria a un descriptor de archivo (mmap inverso)?
- 22. ¿Cómo ejecutar un programa desde el descriptor de archivo?
- 23. ¿Por qué escribir en un descriptor de archivo después de que el archivo de destino haya sido eliminado?
- 24. Crear objeto fstream desde un archivo * puntero
- 25. Cómo convertir int * a int
- 26. ¿Puedo convertir un archivo .swf a un formato de imagen?
- 27. ¿ftell en un descriptor de archivo?
- 28. Convertir un archivo .bak a .SQL archivo
- 29. ¿Cómo convertir un Enum a un int?
- 30. ¿Cómo puedo convertir un int a un CString?
auto-respuestas en esta forma "riesgo" se les anima. – dmckee
O podría abrir el archivo con abrir (2), y tendría un descriptor de archivo desde el principio –
Y el inverso: [¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?] (Http://stackoverflow.com/ questions/1941464/how-to-get-a-file-pointer-from-a-file-descriptor) –