Mam FILE *
, zwrócony telefonem do fopen()
. Potrzebuję z niego deskryptora pliku, aby wykonywać takie wywołania fsync(fd)
. Jaka jest funkcja uzyskiwania deskryptora pliku ze wskaźnika pliku?
Mam FILE *
, zwrócony telefonem do fopen()
. Potrzebuję z niego deskryptora pliku, aby wykonywać takie wywołania fsync(fd)
. Jaka jest funkcja uzyskiwania deskryptora pliku ze wskaźnika pliku?
Odpowiedzi:
Właściwa funkcja to int fileno(FILE *stream)
. Można go znaleźć w <stdio.h>
standardzie POSIX, ale nie w standardzie C.
#include
niczego nie trzeba . Miałem po prostu na myśli to, że zawsze łatwo jest znaleźć nazwę odpowiedniego nagłówka dla standardowej funkcji. Oznacza to, że podanie dokładnej nazwy nagłówka w odpowiedzi nie jest naprawdę ważne.
Nawet jeśli fileno(FILE *)
może zwrócić deskryptor pliku, BARDZO uważaj, aby nie ominąć bufora stdio. Jeśli istnieją dane bufora (do odczytu lub zapisu bez zaznaczenia), odczyty / zapisy z deskryptora pliku mogą dać nieoczekiwane wyniki.
Aby odpowiedzieć na jedno z pytań pobocznych, aby przekonwertować deskryptor pliku na wskaźnik FILE, użyj fdopen(3)