C fil input/output - C file input/output

Det sprog C programmering giver mange standard bibliotekets funktioner til fil input og output . Disse funktioner udgør hovedparten af C -standardbibliotekets overskrift <stdio.h> . Funktionaliteten stammer fra en "bærbar I/O -pakke" skrevet af Mike Lesk på Bell Labs i begyndelsen af ​​1970'erne og blev officielt en del af Unix -operativsystemet i version 7 .

I/O-funktionaliteten af ​​C er temmelig lavt niveau efter moderne standarder; C abstracts alle fil operationer i operationer på strømme af bytes , som kan være "input streams" eller "udgangsstrømme". I modsætning til nogle tidligere programmeringssprog har C ingen direkte understøttelse af datafiler med tilfældig adgang ; for at læse fra en post i midten af ​​en fil, skal programmøren oprette en strøm, søge til midten af ​​filen og derefter læse bytes i rækkefølge fra strømmen.

Streammodellen for fil I/O blev populariseret af Unix, som blev udviklet sideløbende med selve C -programmeringssproget. Langt de fleste moderne operativsystemer har arvet streams fra Unix, og mange sprog i C -programmeringssprogsfamilien har arvet C's fil -I/O -interface med få, hvis nogen ændringer (f.eks. PHP ).

Oversigt

Dette bibliotek bruger det, der kaldes streams, til at fungere med fysiske enheder såsom tastaturer, printere, terminaler eller med enhver anden type filer, der understøttes af systemet. Strømme er en abstraktion til at interagere med disse på en ensartet måde. Alle vandløb har lignende egenskaber uafhængigt af de individuelle egenskaber ved de fysiske medier, de er forbundet med.

Funktioner

De fleste af C -fil input/output funktioner er defineret i <stdio.h> (eller i C ++ header cstdio , som indeholder standard C funktionaliteten, men i std navneområdet ).

Byte
karakter
Bred
karakter
Beskrivelse
Filadgang fopen Åbner en fil (med et filnavn, der ikke er Unicode på Windows og muligt UTF-8 filnavn på Linux)
frit åbent Åbner en anden fil med en eksisterende strøm
fflush Synkroniserer en output -strøm med den faktiske fil
fclose Lukker en fil
setbuf Indstiller bufferen til en filstrøm
setvbuf Indstiller bufferen og dens størrelse for en filstrøm
fwide Skifter en filstrøm mellem I/O med bred karakter og I/O med smal karakter
Direkte
input/output
fread Læser fra en fil
fwrite Skriver til en fil
Uformateret
input/output
fgetc
getc
fgetwc
getwc
Læser en byte/ wchar_t fra en filstrøm
fgets fgetws Læser en byte/ wchar_t linje fra en filstrøm
fputc
putc
fputwc
putwc
Skriver en byte/ wchar_t til en filstrøm
fputs fputws Skriver en byte/ wchar_t streng til en filstrøm
getchar getwchar Læser en byte/ wchar_t fra stdin
får Ikke relevant Læser en byte -streng fra stdin, indtil der er stødt på en ny linje eller enden af ​​filen (udfaset i C99, fjernet fra C11)
putchar putwchar Skriver en byte/ wchar_t til stdout
sætter Ikke relevant Skriver en byte streng til stdout
ungetc ungetwc Sætter en byte/ wchar_t tilbage i en filstrøm
Formateret
input/output
scanf
fscanf
sscanf
wscanf
fwscanf
swscanf
Læser formateret byte/ wchar_t input fra stdin,
en filstrøm eller en buffer
vscanf
vfscanf
vsscanf
vwscanf
vfwscanf
vswscanf
Læser formateret inputbyte/ wchar_t fra stdin,
en filstrøm eller en buffer ved hjælp af variabel argumentliste
printf
fprintf
sprintf
snprintf
wprintf
fwprintf
swprintf
Udskriver formateret byte/ wchar_t output til stdout,
en filstrøm eller en buffer
vprintf
vfprintf
vsprintf
vsnprintf
vwprintf
vfwprintf
vswprintf
Udskriver formateret byte/ wchar_t output til stdout,
en filstrøm eller en buffer ved hjælp af variabel argumentliste
perror Ikke relevant Skriver en beskrivelse af den aktuelle fejl til stderr
Filplacering ftell
ftello
Returnerer den aktuelle filpositionindikator
fseek
fseeko
Flytter indikatoren for filposition til en bestemt placering i en fil
fgetpos Henter indikatoren for filposition
fsetpos Flytter indikatoren for filposition til en bestemt placering i en fil
spole tilbage Flytter filpositionindikatoren til begyndelsen i en fil
Fejl
håndtering
klarerer Rydder fejl
feof Kontrollerer, om filen er slut
ferror Kontrollerer en filfejl
Operationer
på filer
fjerne Sletter en fil
omdøbe Omdøber en fil
tmpfile Returnerer en markør til en midlertidig fil
tmpnam Returnerer et unikt filnavn

Konstanter

Konstanter defineret i <stdio.h> -overskriften omfatter:

Navn Noter
EOF Et negativt heltal af typen int, der bruges til at angive end-of-file-betingelser
BUFSIZ Et heltal som er størrelsen af den anvendte buffer af setbuf () funktion
FILENAME_MAX Størrelsen på et char -array, der er stort nok til at gemme navnet på enhver fil, der kan åbnes
FOPEN_MAX Antallet af filer, der kan være åbne samtidigt; vil være mindst otte
_IOFBF En forkortelse for "input/output fully buffered"; Det er et helt tal, som kan ledes til setvbuf () funktion til anmodning blok pufret input og output til en åben strøm
_IOLBF En forkortelse for "input/output line buffered"; det er et helt tal, der kan sendes til setvbuf () -funktionen for at anmode om line bufferet input og output for en åben strøm
_IONBF En forkortelse for "input/output not buffered"; det er et helt tal, der kan sendes til setvbuf () -funktionen for at anmode om ikke -bufferet input og output for en åben strøm
L_tmpnam Størrelsen på et char -array, der er stort nok til at gemme et midlertidigt filnavn genereret af tmpnam () -funktionen
NUL En makro, der udvider sig til nulmarkørkonstanten ; det vil sige en konstant, der repræsenterer en markørværdi, som garanteret ikke er en gyldig adresse for et objekt i hukommelsen
SEEK_CUR Et helt tal, der kan sendes til funktionen fseek () for at anmode om positionering i forhold til den aktuelle filposition
SEEK_END Et helt tal, der kan sendes til funktionen fseek () for at anmode om positionering i forhold til slutningen af ​​filen
SEEK_SET Et helt tal, som kan sendes til funktionen fseek () for at anmode om positionering i forhold til begyndelsen af ​​filen
TMP_MAX Det maksimale antal unikke filnavne, der kan genereres af funktionen tmpnam () ; vil være mindst 25

Variabler

Stdstreams-notitle.svg

Variabler defineret i <stdio.h> -overskriften omfatter:

Navn Noter
stdin En markør til en FIL, der refererer til standardindgangsstrømmen, normalt et tastatur.
stdout En markør til en FIL, der refererer til standardoutputstrømmen, normalt en displayterminal.
stderr En markør til en FIL, der refererer til standardfejlstrømmen, ofte en displayterminal.

Medlemstyper

Datatyper defineret i overskriften <stdio.h> omfatter:

  • FIL - også kendt som afil håndtag , er dette en uigennemsigtig type, der indeholder information om en fil eller tekststreng nødvendig for at udføre input eller output operationer på det, herunder:
    • platformspecifik identifikator for den tilknyttede I/O-enhed, f.eks. en filbeskrivelse
    • bufferen
    • strømorienteringsindikator (frakoblet, smal eller bred)
    • strømbufferttilstandsindikator (ikke -bufret, linjebuffet, fuldt bufret)
    • I/O -tilstandsindikator (inputstrøm, outputstrøm eller opdateringsstrøm)
    • indikator for binær/teksttilstand
    • end-of-file indikator
    • fejlindikator
    • den aktuelle strømposition og multibytkonverteringstilstand (et objekt af typen mbstate_t)
    • genindlåsning (påkrævet fra C11 )
  • fpos_t -en ikke-array-type, der er i stand til entydigt at identificere placeringen af ​​hver byte i en fil og hver konverteringstilstand, der kan forekomme i alle understøttede multibyte-tegnkodninger
  • size_t - en usigneret heltalstype, der er typen af ​​resultatet af operatoren sizeof .

Udvidelser

De POSIX -standarden definerer flere udvidelser til stdio i sin Base Definitioner, blandt hvilke er en readline funktion, der tildeler hukommelse, Fileno og fdopen funktioner, der etablerer forbindelsen mellem FIL objekter og fil deskriptorer , og en gruppe af funktioner for at skabe FILE objekter, der refererer til in-memory buffere.

Eksempel

Følgende C -program åbner en binær fil kaldet myfile , læser fem bytes fra den og lukker derefter filen.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char buffer[5];
    FILE* fp = fopen("myfile", "rb");

    if (fp == NULL) {
        perror("Failed to open file \"myfile\"");
        return EXIT_FAILURE;
    }

    for (int i = 0; i < 5; i++) {
        int rc = getc(fp);
        if (rc == EOF) {
            fputs("An error occurred while reading the file.\n", stderr);
            return EXIT_FAILURE;
        }
        
        buffer[i] = rc;
    }

    fclose(fp);

    printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1],
        buffer[2], buffer[3], buffer[4]);

    return EXIT_SUCCESS;
}

Alternativer til stdio

Flere alternativer til stdio er blevet udviklet. Blandt disse er C ++ iostream -biblioteket, en del af ISO C ++ - standarden . ISO C ++ kræver stadig stdio -funktionaliteten.

Andre alternativer inkluderer SFIO (Et sikkert/hurtigt I/O -bibliotek) bibliotek fra AT&T Bell Laboratories . Dette bibliotek, der blev introduceret i 1991, havde til formål at undgå inkonsekvenser, usikre metoder og ineffektivitet i design af stdio . Blandt dens funktioner er muligheden for at indsætte tilbagekaldsfunktioner i en strøm for at tilpasse håndteringen af ​​data, der læses fra eller skrives til strømmen. Den blev frigivet til omverdenen i 1997, og den sidste udgivelse var 1. februar 2005.

Se også

Referencer

eksterne links