fileno und close
-
Hallo,
ich habe eine Frage zu folgendem Bsp-Code:
[code]int main( void ) { FILE *stream; stream = fopen( "file", "r" ); if( stream != NULL ) { int fd = fileno( stream ); close( fd); return EXIT_SUCCESS; } return EXIT_FAILURE; }[/code]
Wenn ich einen Stream öffne und mir mit fileno() den Descriptor zurückgeben lasse, wird wenn ich ein close() auf den Descriptor aufrufe auch gleich das File geschlossen? Bei mir sieht es so aus als ob ich zusätzlich auch fclose(stream) aufrufen muss.
Danke für jede Hilfe
Walli
-
Gegenfrage: Was bringt es dir überhaupt, den File-Deskriptor zu besorgen? Ein direkter fclose()-Aufruf reicht vollkommen aus, um die Datei zu schließen.
-
Der obige Code ist nur ein Beispiel. In diesem Beispiel bringt es natürlich nichts mit close() zu arbeiten. Es kann aber Situation geben wo man mit einem Fd statt einem Stream arbeiten möchte. Z.B. um die generischen read() und write() Funktionen anwenden zu können. Meine Frage zielte eigentlich darauf hin, was passiert wenn ich den Fd schließe, nicht ob es sinnvoll ist aus einem Steam einen Fd zu machen.
Gruß
Walli
-
Weiß hier wirklich niemand weiter?
-
Walliworld schrieb:
Weiß hier wirklich niemand weiter?
schau dir doch den quelltext von 'fclose' an. ich nehme an, der flushed erst den buffer und ruft dann 'close' auf.
das würde bedeuten, wenn du 'close' vorher aufrufst, könnten daten verloren gehen.
ist aber nur eine vermutung.