Ich habe eine FILE *
, durch einen Anruf an zurückgegeben fopen()
. Ich brauche einen Dateideskriptor, um Anrufe wie fsync(fd)
darauf zu tätigen . Was ist die Funktion, um einen Dateideskriptor von einem Dateizeiger abzurufen?
174
Antworten:
Die richtige Funktion ist
int fileno(FILE *stream)
. Es befindet sich in<stdio.h>
und ist ein POSIX-Standard, jedoch kein Standard C.quelle
#include
. Ich meinte nur, dass es immer einfach ist, den Namen des richtigen Headers für eine Standardfunktion zu finden . Das heißt, es ist nicht wirklich kritisch, den genauen Headernamen in der Antwort zu erwähnen.Auch wenn
fileno(FILE *)
möglicherweise ein Dateideskriptor zurückgegeben wird, achten Sie SEHR darauf, den Puffer von stdio nicht zu umgehen. Wenn Pufferdaten vorhanden sind (entweder Lesen oder nicht geleertes Schreiben), können Lese- / Schreibvorgänge aus dem Dateideskriptor zu unerwarteten Ergebnissen führen.Verwenden Sie, um eine der Nebenfragen zu beantworten und einen Dateideskriptor in einen DATEI-Zeiger zu konvertieren
fdopen(3)
quelle