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?
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?
Antworten:
Die richtige Funktion ist int fileno(FILE *stream)
. Es befindet sich in <stdio.h>
und ist ein POSIX-Standard, jedoch kein Standard C.
#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)