Как я могу преобразовать указатель файла (FILE * fp) в дескриптор файла (int fd)? - PullRequest
160 голосов
/ 02 июля 2010

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

Ответы [ 2 ]

195 голосов
/ 02 июля 2010

Правильная функция - int fileno(FILE *stream). Его можно найти в <stdio.h>, и это стандарт POSIX, но не стандарт C.

34 голосов
/ 14 ноября 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...