C fil input/output - C file input/output
| C standardbibliotek |
|---|
| Generelle emner |
| Diverse overskrifter |
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 | |
|
|
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
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
-
Medier relateret til C -fil input/output på Wikimedia Commons