У меня есть FILE *
, возвращенный вызовом fopen()
. Мне нужно получить от него дескриптор файла, чтобы на нем называть такие вызовы, как fsync(fd)
. Какую функцию получить дескриптор файла из указателя файла?
Как преобразовать указатель файла (FILE * fp) в дескриптор файла (int fd)?
Ответ 1
Собственная функция int fileno(FILE *stream)
. Он может быть найден в <stdio.h>
и является стандартом POSIX, но не стандартным C.
Ответ 2
Даже если fileno(FILE *)
может возвращать дескриптор файла, будьте ОЧЕНЬ осторожны, чтобы не обходить буфер stdio. Если есть данные буфера (как чтение, так и незапертая запись), чтение/запись из дескриптора файла может дать вам неожиданные результаты.
Чтобы ответить на один из побочных вопросов, чтобы преобразовать дескриптор файла в указатель FILE, используйте fdopen(3)