Как преобразовать указатель файла (FILE * fp) в дескриптор файла (int fd)?

У меня есть FILE *, возвращенный вызовом fopen(). Мне нужно получить от него дескриптор файла, чтобы на нем называть такие вызовы, как fsync(fd). Какую функцию получить дескриптор файла из указателя файла?

Ответ 1

Собственная функция int fileno(FILE *stream). Он может быть найден в <stdio.h> и является стандартом POSIX, но не стандартным C.

Ответ 2

Даже если fileno(FILE *) может возвращать дескриптор файла, будьте ОЧЕНЬ осторожны, чтобы не обходить буфер stdio. Если есть данные буфера (как чтение, так и незапертая запись), чтение/запись из дескриптора файла может дать вам неожиданные результаты.

Чтобы ответить на один из побочных вопросов, чтобы преобразовать дескриптор файла в указатель FILE, используйте fdopen(3)