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.
#includeniczego 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)