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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.