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

Variablen, die in der definiert sind
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
- 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
- ^ ISO/IEC 9899: 1999 Spezifikation (PDF). p. 274, § 7.19.
- ^ Kernighan, Brian; Pike, Rob (1984). Die UNIX -Programmierumgebung. Englewood Cliffs: Prentice Hall. p. 200.
- ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
- ^ "(stdio.h) - c ++ Referenz".
- ^ Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe - Basisdefinitionen Referenz,
- ^ "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) - ^ Korn, David G.; VO, Kiem-PHONG (1991). SFIO: Safe/Fast String/Datei IO. Proc. Sommer Usenix Conf. Citeseerx 10.1.1.51.6574.
- ^ 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