Ich spiele mit mkstemp()
der einen Dateideskriptor bereitstellt, aber ich möchte eine formatierte Ausgabe über generieren fprintf()
. Gibt es eine einfache Möglichkeit, den von bereitgestellten Dateideskriptor umzuwandeln? mkstemp()
in ein FILE *
Struktur, die für die Verwendung mit geeignet ist fprintf()
?
Wie bekomme ich einen FILE-Zeiger von einem Dateideskriptor?
BD in Rivenhill
Richard Pennington
Verwenden fdopen()
:
FILE* fp = fdopen(fd, "w");
-
Und um den Dateideskriptor von einer FILE*-Verwendung zu erhalten
fileno()
: linux.die.net/man/3/fileno– Lee Netherton
17. Oktober 2011 um 14:28 Uhr
-
wenn
fd
wurde mit einigen Flaggen geöffnet (wieO_NONBLOCK
) — was danach mit ihnen passieren wirdfdopen
öffnet es mit neuen Flaggen? Werden sie es seinxor
-ed zusammen oder ersetzt?– xealits
4. November 2015 um 19:09 Uhr
-
@jww: Dateideskriptoren sind zunächst kein ANSI C.
– Rüschenwind
2. Mai 2016 um 1:08 Uhr
-
ist es schlecht anzurufen
fdopen
mehrmals? (vorausgesetzt, es passiert in einer Funktion, die immer wieder aufgerufen wird)– phil294
4. Juli 2017 um 23:08 Uhr
-
@xealits Die Optionen für die Datei* müssen im Bereich des bereits geöffneten Dateideskriptors liegen. Wenn Sie also fd nur mit Lesezugriff und FILE* nur mit Schreibzugriff geöffnet haben, sollte eine Ausnahme ausgelöst werden. Weitere Informationen finden Sie unter ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…
– Tjad Clark
6. Dezember 2017 um 7:59 Uhr
Gregor Pakosz
FILE* f = fdopen(d, "w");
man fdopen-Ausgabe:
ZUSAMMENFASSUNG
#include <stdio.h>
FILE *
fdopen(int fildes, const char *mode);
Das
fdopen()
Funktion verknüpft einen Stream mit dem vorhandenen Dateideskriptor,fildes
. Der Modus des Streams muss mit dem Modus des Dateideskriptors kompatibel sein. Wenn der Stream geschlossen wird überfclose(3)
,fildes
ist auch geschlossen.
-
Nicht verfügbar in ANSI C.
– jww
26. März 2016 um 23:28 Uhr
-
Weitere Informationen finden Sie unter ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…
– Tjad Clark
6. Dezember 2017 um 8:02 Uhr
Dafür gibt es keine Standardmethode (oder umgekehrt), da der C-Standard nichts über Dateideskriptoren zu sagen hat. Ihre spezifische Plattform kann einen solchen Mechanismus bereitstellen oder nicht.
-
Kommt darauf an, was man unter “Standard” versteht. POSIX ist ein Standard.
– Richard Pennington
21. Dezember 2009 um 17:33 Uhr
-
Die Frage bezog sich auf Dateideskriptoren. 😉
– Richard Pennington
21. Dezember 2009 um 17:35 Uhr
-
@Neil > Die Frage, die als C gekennzeichnet ist, bedeutet nicht “Sag mir die heilige Wahrheit über den C-Standard”, sondern “Ich codiere in C, ich scheitere dabei, bitte sag mir, ob es möglich ist und wie? “
– Gregory Pakosz
21. Dezember 2009 um 17:42 Uhr
-
Ich stimme zu, dass es dafür keine Standardmethode gibt, aber die Erwähnung des OP
mkstemp
impliziert, dass in diesem speziellen Fall nicht standardmäßige Lösungen akzeptabel sind. In diesem Fall hätte er jedoch die hinzufügen müssenposix
-Tag (das, wie ich sehe, inzwischen hinzugefügt wurde).– Emerick Rogul
21. Dezember 2009 um 17:59 Uhr
-
@Neil, und der Zweck des Netzes und der Sinn des Lebens. Sie würden mehr Sinn machen, wenn Sie sagen würden, dass Sie anderer Meinung sind. Ich bezweifle auch, dass es bei SO nur um Haarspalterei über Standards geht. Und es ist nicht sehr praktisch, sich auf die Tagging-Fähigkeiten von jemandem mit einer SO-Erfahrung zu verlassen, die dem Ruf von 23 entspricht.
– Michael Krelin – Hacker
21. Dezember 2009 um 18:08 Uhr
Und umgekehrt: Wie kann ich einen Dateizeiger ( FILE* ) in einen Dateideskriptor (fd) umwandeln?
– Michael Burr
1. Oktober 2013 um 20:37 Uhr