Forum: PC-Programmierung Unterschied fopen/open, fread/read, fwrite/write,.


von Alex (Gast)


Lesenswert?

Neulich sind mir bei der Linux programmierung die Funktionen open, read, 
write,.. untergekommen. Was unterscheidet diese funktionen eingetlich 
von den standard C-Funktionen wie fopen,...?

von Hermann-Josef M. (hermann-josef)


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

: Bearbeitet durch User
von Amateur (Gast)


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.

von Noch einer (Gast)


Lesenswert?

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.

von A. H. (ah8)


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.

von Luther B. (luther-blissett)


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...)

von Programmierer (Gast)


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.