C Dateieingabe/Ausgabe

Das C Programmiersprache bietet viele Standardbibliothek Funktionen zum Datei Eingang und Ausgabe. Diese Funktionen machen den größten Teil des C Standardbibliothek Header .[1] Die Funktionalität stammt von einem "tragbaren E/A -Paket" ab, das von geschrieben wurde Mike Lesk in den frühen 1970er Jahren bei Bell Labs,[2] und wurde offiziell Teil der Unix Betriebssystem in Version 7.[3]

Die E/A-Funktionalität von C ist nach modernen Maßstäben ziemlich niedrig. C Zusammenfassung alle Dateioperationen in Operationen auf Ströme von Bytes, die "Eingabestreams" oder "Ausgabestreams" sein können. Im Gegensatz zu einigen früheren Programmiersprachen hat C keine direkte Unterstützung für Zufallszugriff Datei; Um aus einem Datensatz in der Mitte einer Datei zu lesen, muss der Programmierer einen Stream erstellen. suchen in der Mitte der Datei und dann nacheinander Bytes aus dem Stream lesen.

Das Stream -Modell der Datei -I/O wurde von UNIX populär gemacht, das gleichzeitig mit der C -Programmiersprache selbst entwickelt wurde. Die überwiegende Mehrheit der modernen Betriebssysteme hat Streams von UNIX geerbt, und viele Sprachen in der C -Programmiersprache C haben die I/A -Schnittstelle von C mit wenigen Änderungen geerbt (zum Beispiel. Php).

Überblick

Diese Bibliothek verwendet sogenannte Streams, um mit physischen Geräten wie Tastaturen, Druckern, Terminals oder anderen vom System unterstützten Dateien zu arbeiten. Streams sind eine Abstraktion, um auf einheitliche Weise mit diesen zu interagieren. Alle Streams haben ähnliche Eigenschaften unabhängig von den individuellen Eigenschaften der physischen Medien, mit denen sie verbunden sind.[4]

Funktionen

Die meisten Eingangs-/Ausgabefunktionen der C -Datei werden in definiert (oder in der C ++ Header CSTDIO, was die Standard -C -Funktionalität enthält, aber in der std Namespace).

Byte
Charakter
Breit
Charakter
Beschreibung
Dateizugriff fopen Öffnet eine Datei (mit einem Nicht-Unicode-Dateinamen unter Windows und einem möglichen UTF-8-Dateinamen unter Linux)
Freopen Öffnet eine andere Datei mit einem vorhandenen Stream
fflush Synchronisiert einen Ausgabestrom mit der tatsächlichen Datei
fCLOSE Schließt eine Datei
setbuf Legt den Puffer für einen Dateistrom fest
setvbuf Legt den Puffer und seine Größe für einen Dateistrom fest
fwide Schaltet einen Dateistrom zwischen Weitcharakter-E/A und schmaler Charakter-E/O.
Direkte
Input-Output
frei Liest aus einer Datei
frite Schreibt in eine Datei
Unformatiert
Input-Output
FGetc
Getc
fGetwc
Getwc
Liest ein byte/ wchar_t aus einem Dateistrom
fgets fGetws Liest ein byte/ wchar_t Zeile aus einem Dateistrom
fputc
Putc
fputwc
Putwc
Schreibt ein Byte/ wchar_t zu einem Dateistrom
Fputs fputws Schreibt ein Byte/ wchar_t Zeichenfolge zu einem Dateistrom
Getchar Getwchar Liest ein byte/ wchar_t von Stdin
bekommt - Liest eine Byte -Zeichenfolge von Stdin, bis eine neue Linie oder ein Ende der Datei auftritt (veraltet in C99, entfernt aus C11)
Putchar Putwchar Schreibt ein Byte/ wchar_t zu stdout
stellt - Schreibt eine Byte -Zeichenfolge in Stdout
Ungetc Ungetwc Setzt ein Byte/ wchar_t Zurück in einen Dateistrom
Formatiert
Input-Output
Scanf
fscanf
Sscanf
WSCANF
fwscanf
swscanf
Liest formatiert byte/ wchar_t Eingabe von Stdin,
ein Dateistrom oder ein Puffer
VSCANF
vfscanf
VSSCANF
vwscanf
vfwscanf
vswscanf
Liest formatiertes Eingabe Byte/ wchar_t aus Stdin,
Ein Dateistrom oder ein Puffer, das variable Argumentliste verwendet
printf
fprintf
Sprintf
snprintf
Wprintf
fwprintf
Swprintf
Drucke formatiert Byte/ wchar_t Ausgabe an stdout,
ein Dateistrom oder ein Puffer
Vprintf
vfprintf
vSprintf
vsnprintf
vwprintf
vfwprintf
vswprintf
Drucke formatiert Byte/ wchar_t Ausgabe an stdout,
Ein Dateistrom oder ein Puffer mit variabler Argumentliste
Perror - Schreibt eine Beschreibung der Aktueller Fehler nach Stderr
Dateipositionierung ftell
ftello
Gibt den aktuellen Dateipositionsindikator zurück
fseek
fseeko
Verschiebt den Dateipositionsindikator in einen bestimmten Speicherort in einer Datei
fGetpos Ruft den Dateipositionsindikator ab
fsetpos Verschiebt den Dateipositionsindikator in einen bestimmten Speicherort in einer Datei
zurückspulen Verschiebt den Dateipositionsindikator auf den Anfang in einer Datei
Fehler
Handhabung
Clearerr Löscht Fehler
Feof Schecks auf das Dateiende
Futter Überprüft einen Dateifehler
Operationen
auf Dateien
Löschen Löscht eine Datei
umbenennen Umbenannt eine Datei
tmpfile Gibt einen Zeiger auf eine temporäre Datei zurück
tmpnam Gibt einen einzigartigen Dateinamen zurück

Konstanten

Konstanten in der definiert Header umfassen:

Name Anmerkungen
Eof Eine negative Ganzzahl vom Typ int Wird verwendet, um die Handlungsbedingungen anzuzeigen
Bufsiz Eine Ganzzahl, die die Größe des von der verwendeten Puffer hat setbuf () Funktion
Dateiname_max Die Größe von a verkohlen Array, das groß genug ist, um den Namen jeder Datei zu speichern, die geöffnet werden kann
Fopen_max Die Anzahl der Dateien, die gleichzeitig geöffnet werden können; wird mindestens acht sein
_Iofbf Eine Abkürzung für "Eingabe/Ausgang vollständig gepuffert"; Es ist eine Ganzzahl, die an die übergeben werden kann setvbuf () Funktion zu fordern Block gepuffert Eingabe und Ausgabe für einen geöffneten Stream
_Iolbf Eine Abkürzung für "Eingabe/Ausgangsleitung gepuffert"; Es ist eine Ganzzahl, die an die übergeben werden kann setvbuf () Funktion zu fordern Linie gepuffert Eingabe und Ausgabe für einen geöffneten Stream
_Ionbf Eine Abkürzung für "Eingabe/Ausgang nicht gepuffert"; Es ist eine Ganzzahl, die an die übergeben werden kann setvbuf () Funktion zu fordern ungelen Eingabe und Ausgabe für einen geöffneten Stream
L_tmpnam Die Größe von a verkohlen Array, das groß genug ist, um einen von der generierten temporären Dateinamen zu speichern tmpnam () Funktion
NULL Ein Makro, das sich auf die ausdehnt Null Zeiger Konstante; das heißt eine Konstante, die einen Zeigerwert darstellt, der garantiert ist nicht Eine gültige Adresse eines Objekts im Speicher zu sein
Such_cur Eine Ganzzahl, die an die übergeben werden kann fseek () Funktion zum Anfordern der Positionierung relativ zur aktuellen Dateiposition
Suche_end Eine Ganzzahl, die an die übergeben werden kann fseek () Funktion zum Anfordern der Positionierung im Verhältnis zum Ende der Datei
Such_set Eine Ganzzahl, die an die übergeben werden kann fseek () Funktion zum Anfordern der Positionierung im Verhältnis zum Beginn der Datei
Tmp_max Die maximale Anzahl der eindeutigen Dateinamen, die von der generierbaren dienen können tmpnam () Funktion; wird mindestens 25 sein

Variablen

Stdstreams-notitle.svg

Variablen, die in der definiert sind Header umfassen:

Name Anmerkungen
Stdin Ein Zeiger auf a DATEI Dies bezieht sich auf den Standardeingangsstrom, normalerweise eine Tastatur.
Stdout Ein Zeiger auf a DATEI Dies bezieht sich auf den Standardausgangsstrom, in der Regel ein Anzeigeanschluss.
Stderr Ein Zeiger auf a DATEI Dies bezieht sich auf den Standardfehlerstrom, häufig ein Anzeigeanschluss.

Mitgliedstypen

Datentypen, die in der definiert sind Header umfassen:

  • DATEI - auch bekannt als a Datei handhaben, das ist ein undurchsichtiger Typ Enthält die Informationen zu einem Datei- oder Textstrom, der zur Durchführung von Eingabe- oder Ausgabevorgängen erforderlich ist, einschließlich:
    • plattformspezifische Kennung des zugehörigen E/A-Geräts wie a Dateideskriptor
    • der Puffer
    • Stream -Orientierungsindikator (unbegründet, schmal oder breit)
    • Stream -Pufferungszustandsanzeige (ungelender, Linie gepuffert, vollständig gepuffert)
    • E/A -Modus -Anzeige (Eingabestream, Ausgabestream oder Aktualisierungsstrom)
    • Binär-/Textmodus -Anzeige
    • Indikator am Ende der Datei
    • Fehleranzeige
    • Die aktuelle Streamposition und der Multibyte -Konvertierungszustand (ein Objekt vom Typ mbstate_t)
    • Wiedereintrittschloss (erforderlich ab C11)
  • fpos_t -Ein Nicht-Array
  • size_t - ein Unsigned Ganzzahl Typ, der der Typ des Ergebniss der ist Größe von Operator.

Erweiterungen

Das Posix Standard definiert verschiedene Erweiterungen bis stdio in seinen Grunddefinitionen, darunter a Zeile lesen Funktion, die Speicher zuweist, die Fileno und fdopen Funktionen, die die Verbindung zwischen feststellen DATEI Objekte und Dateideskriptorenund eine Gruppe von Funktionen zum Erstellen DATEI Objekte, die sich auf In-Memory-Puffer beziehen.[5]

Beispiel

Das folgende C -Programm öffnet eine binäre Datei mit dem Namen meine Dateiliest fünf Bytes daraus und schließt dann die Datei.

#enthalten  #enthalten  int hauptsächlich(Leere) {   verkohlen Puffer[5];   DATEI* FP = fopen("meine Datei", "RB");   wenn (FP == NULL) {   Perror("Datei konnte nicht geöffnet werden \ "meine Datei\ "");   Rückkehr Exit_failure;   }   zum (int i = 0; i < 5; i++) {   int rc = Getc(FP);   wenn (rc == Eof) {   Fputs("Beim Lesen der Datei ist ein Fehler aufgetreten.\n", Stderr);   Rückkehr Exit_failure;   }      Puffer[i] = rc;   }   fCLOSE(FP);   printf("Die Lesen der Bytes waren ... %x %x %x %x %x\n", Puffer[0], Puffer[1],   Puffer[2], Puffer[3], Puffer[4]);   Rückkehr Exit_success; } 

Alternativen zu Stdio

Mehrere Alternativen zu stdio wurden entwickelt. Darunter ist die C ++ iostream Bibliothek, Teil der ISO C ++ Standard. ISO C ++ benötigt immer noch die stdio Funktionalität.

Andere Alternativen sind das SFIO[6] (Eine sichere/schnelle E/A -Bibliothek) Bibliothek aus AT & T Bell Laboratories. Diese 1991 eingeführte Bibliothek zielte darauf ab, Inkonsistenzen, unsichere Praktiken und Ineffizienzen bei der Gestaltung von zu vermeiden stdio. Zu seinen Merkmalen gehört die Möglichkeit zum Einfügen Rückruffunktionen in einen Stream, um die Handhabung von Daten anzupassen, die aus dem Stream gelesen oder in den Stream geschrieben wurden.[7] Es wurde 1997 in die Außenwelt veröffentlicht, und die letzte Veröffentlichung war der 1. Februar 2005.[8]

Siehe auch

Verweise

  1. ^ ISO/IEC 9899: 1999 Spezifikation (PDF). p. 274, § 7.19.
  2. ^ Kernighan, Brian; Pike, Rob (1984). Die UNIX -Programmierumgebung. Englewood Cliffs: Prentice Hall. p. 200.
  3. ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
  4. ^ "(stdio.h) - c ++ Referenz".
  5. ^ stdio.h- Basisdefinitionen Referenz, Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe
  6. ^ "SFIO: Eine sichere/schnelle E/A -Bibliothek". Archiviert vom Original am 11. Februar 2006. Abgerufen 16. März 2021.{{}}: CS1 Wartung: Bot: Original -URL -Status unbekannt (Link)
  7. ^ Korn, David G.; VO, Kiem-PHONG (1991). SFIO: Safe/Fast String/Datei IO. Proc. Sommer Usenix Conf. Citeseerx 10.1.1.51.6574.
  8. ^ Fowler, Glenn S.; Korn, David G.; VO, Kiem-PHONG (2000). Erweiterte Formatierung mit SFIO. Proc. Sommer Usenix Conf.

Externe Links

  • Medien im Zusammenhang mit C -Dateieingabe/Ausgabe bei Wikimedia Commons