Ich spiele herum mit mkstemp(), die einen Dateideskriptor bietet, aber ich möchte formatierte Ausgabe über fprintf() generieren. Gibt es eine einfache Möglichkeit, den von mkstemp() bereitgestellten Dateideskriptor in eine FILE * -Struktur zu transformieren, die für die Verwendung mit fprintf() geeignet ist?Wie bekomme ich einen FILE-Zeiger von einem Dateideskriptor?
Antwort
Verwenden fdopen()
:
FILE* fp = fdopen(fd, "w");
Und um den Dateideskriptor von einer FILE zu bekommen * benutze 'fileno()': http://linux.die.net/man/3/fileno –
wenn 'fd' mit einigen Flags (wie' O_NONBLOCK') geöffnet wurde - was passiert mit ihnen nachdem 'fdopen' es mit neuen Flags öffnet? Werden sie zusammen oder ersetzt werden? – xealits
Nicht verfügbar in ANSI C. – jww
FILE* f = fdopen(d, "w");
Mann fdopen output:
SYNOPSE
#include <stdio.h>
FILE *
fdopen(int fildes, const char *mode);
Die Funktion
fdopen()
ordnet einen Stream dem vorhandenen Dateideskriptorfildes
zu. Der Modus des Streams muss mit dem Modus des Dateideskriptors kompatibel sein. Wenn der Stream überfclose(3)
geschlossen wird, ist auchfildes
geschlossen.
Nicht verfügbar in ANSI C. – jww
Für mehr Klarheit, siehe https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rtfdo.htm –
Es gibt keine Standardmethode, dies zu tun (oder umgekehrt), da der C-Standard nichts über Dateideskriptoren zu sagen hat. Ihre spezielle Plattform kann einen solchen Mechanismus bereitstellen oder nicht.
Hängt davon ab, was Sie mit "Standard" meinen. POSIX ist ein Standard. –
Die Frage war etwa C. –
obwohl, die fdopen() - Funktion entspricht IEEE Std 1003.1-1988 ("POSIX.1"). –
Und das Gegenteil: [Wie kann ich einen Dateizeiger (FILE *) in einen Dateideskriptor (fd) konvertieren?] (Http://stackoverflow.com/questions/3167298/how-can-i-convert-a -file-pointer-file-to-a-file-deskriptor-fd) –