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