Unterschied fopen/open, fread/read, fwrite/write,.

#4285715
Lesenswert?

Hallo,

'man <Funktionsname>' würde die entsprechende Auskunft geben, fopen() 
und Co., erzeugen und benutzen FILE* als Handle auf die Datei, open() 
und Co. benutzen ein int als File-Deskriptor, sie liegen also eine Ebene 
weiter unten im System.

Letztere sind auch universeller und können z.B. auch mit Sockets und 
Pipes umgehen.

Gruß
-- HJ

Edit: FILE* bietet ausserdem noch gepufferte I/O an
Gast #4285731
Lesenswert?

Die (f)-Funktionen sind komfortabler brauchen deshalb viel mehr 
Speicher. Könnte bei der Verwendung von µP's eine Überlegung wert sein. 
Weißt Du aber nicht, wie Du den Speicher voll bekommen sollst, benutze 
zusätzlich die printf-Funktionen. Letztere können auch waschen und 
bügeln.
Zugegeben, es gibt Leute, die behaupten: Das ist es wert.
#4285829
Lesenswert?

Die f-Funktionen operieren auf Streams, die anderen direkt auf 
Filedeskriptoren. Der entscheidende Unterschied liegt darin, das Streams 
die Daten im User-Space puffern und blockweise an den Kernel übertragen 
(mit Ausnahme von stderr), was deutliche Performancevorteile bringt, 
während Operationen mit Filedeskriptoren die Daten direkt an einen 
entsprechenden Systemaufruf weiterreichen. Daneben ist das Operieren mit 
Streams oft komfortabler, aber eben auch mit entsprechendem Overhead 
behaftet.
#4285869
Lesenswert?

Noch einer schrieb:
> Theoretisch gibt es die f-Funkionen auf allen Betriebssystemen.
> Die ohne
> f nur unter Unix. Aber heutzutage haben wir sowieso nur mehr
> Betriebssysteme, die diesen Teil vom Unix abschauten.

read(), write() usw. gibt es auch unter Windows (#include <io.h>). Die 
Low-Level IO Funktionen sind in POSIX spezifiziert, werden also (neben 
den Unixen) von allen Betriebssystem unterstützt, welche einen 
POSIX-Layer anbieten. (z.B. Z/OS, VMS, RTEMS...)
Gast #4285887
Lesenswert?

fopen, fwrite usw. sind Standard-C-Funktionen, die es auf allen 
C-konformen Systemen gibt. open, write usw. sind POSIX-Funktionen, die 
es auf allen POSIX-konformen Systemen gibt. Windows z.B. ist erstes, 
aber letzeres nicht. Stattdessen hat es CreateFile, WriteFile usw. Linux 
ist beides und hat daher beide Funktionen. Willst du portabel 
programmieren, ist es sinnvoll die Standard-C-Funktionen fopen, fwrite 
usw. zu verwenden, da die garantiert überall verfügbar sind (außer 
manche embedded Systeme, die dann aber nicht mehr Standard-konform 
sind).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren