Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C - Bestand I/O

In het laatste hoofdstuk werden de standaard invoer- en uitvoerapparaten uitgelegd die door de C-programmeertaal worden behandeld. In dit hoofdstuk wordt beschreven hoe C-programmeurs tekst- of binaire bestanden kunnen maken, openen en sluiten voor hun gegevensopslag.

Een bestand vertegenwoordigt een reeks bytes, ongeacht of het een tekstbestand of een binair bestand is. C-programmeertaal biedt toegang tot functies op hoog niveau en oproepen op laag niveau (OS-niveau) om bestanden op uw opslagapparaten te verwerken. Dit hoofdstuk leidt u door de belangrijke oproepen voor bestandsbeheer.

Bestanden openen

U kunt de fopen( ) . gebruiken functie om een ​​nieuw bestand aan te maken of om een ​​bestaand bestand te openen. Deze aanroep initialiseert een object van het type FILE , die alle informatie bevat die nodig is om de stream te besturen. Het prototype van deze functieaanroep is als volgt −

FILE *fopen( const char * filename, const char * mode );

Hier, bestandsnaam is een letterlijke tekenreeks, die u zult gebruiken om uw bestand een naam te geven en toegang te krijgen tot modus kan een van de volgende waarden hebben −

Sr.nr. Modus en beschrijving
1

r

Opent een bestaand tekstbestand voor leesdoeleinden.

2

met

Opent een tekstbestand om te schrijven. Als het niet bestaat, wordt een nieuw bestand gemaakt. Hier begint uw programma met het schrijven van inhoud vanaf het begin van het bestand.

3

een

Opent een tekstbestand om in toevoegmodus te schrijven. Als het niet bestaat, wordt een nieuw bestand gemaakt. Hier begint uw programma inhoud toe te voegen aan de bestaande bestandsinhoud.

4

r+

Opent een tekstbestand voor zowel lezen als schrijven.

5

w+

Opent een tekstbestand voor zowel lezen als schrijven. Het kapt het bestand eerst af tot de lengte nul als het bestaat, anders maakt het een bestand als het niet bestaat.

6

een+

Opent een tekstbestand voor zowel lezen als schrijven. Het maakt het bestand aan als het niet bestaat. Het lezen begint vanaf het begin, maar schrijven kan alleen worden toegevoegd.

Als je binaire bestanden gaat verwerken, dan gebruik je de volgende toegangsmodi in plaats van de hierboven genoemde −

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Een bestand sluiten

Gebruik de functie fclose( ) om een ​​bestand te sluiten. Het prototype van deze functie is −

int fclose( FILE *fp );

De fclose(-) functie retourneert nul bij succes, of EOF als er een fout is opgetreden bij het sluiten van het bestand. Deze functie verwijdert in feite alle gegevens die nog in de buffer in behandeling zijn, naar het bestand, sluit het bestand en geeft al het geheugen vrij dat voor het bestand wordt gebruikt. De EOF is een constante gedefinieerd in het headerbestand stdio.h .

De standaardbibliotheek van C biedt verschillende functies om een ​​bestand te lezen en te schrijven, teken voor teken of in de vorm van een tekenreeks met een vaste lengte.

Een bestand schrijven

Hieronder volgt de eenvoudigste functie om individuele karakters naar een stream te schrijven −

int fputc( int c, FILE *fp );

De functie fputc() schrijft de tekenwaarde van het argument c naar de uitvoerstroom waarnaar wordt verwezen door fp. Het retourneert het geschreven karakter geschreven op succes, anders EOF als er een fout is. U kunt de volgende functies gebruiken om een ​​null-terminated string naar een stream te schrijven −

int fputs( const char *s, FILE *fp );

De functie fputs() schrijft de tekenreeks s naar de uitvoerstroom waarnaar wordt verwezen door fp. Het retourneert een niet-negatieve waarde voor succes, anders EOF wordt geretourneerd in geval van een fout. U kunt int fprintf(FILE *fp,const char *format, ...) gebruiken functie ook om een ​​string in een bestand te schrijven. Probeer het volgende voorbeeld.

Zorg ervoor dat u /tmp . heeft map beschikbaar. Als dit niet het geval is, moet u, voordat u verder gaat, deze map op uw computer aanmaken.

#include <stdio.h>

main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Wanneer de bovenstaande code is gecompileerd en uitgevoerd, wordt een nieuw bestand test.txt gemaakt in /tmp directory en schrijft twee regels met twee verschillende functies. Laten we dit bestand in de volgende sectie lezen.

Een bestand lezen

Hieronder vindt u de eenvoudigste functie om een ​​enkel teken uit een bestand te lezen −

int fgetc( FILE * fp );

De fgetc() functie leest een teken uit het invoerbestand waarnaar wordt verwezen door fp. De geretourneerde waarde is het gelezen teken, of in geval van een fout retourneert het EOF . Met de volgende functie kan een string uit een stream worden gelezen −

char *fgets( char *buf, int n, FILE *fp );

De functies fgets() leest maximaal n-1 tekens uit de invoerstroom waarnaar wordt verwezen door fp. Het kopieert de leesreeks naar de buffer buf , met een null teken om de tekenreeks te beëindigen.

Als deze functie een teken van een nieuwe regel '\n' of het einde van het bestand EOF tegenkomt voordat ze het maximale aantal tekens hebben gelezen, retourneert het alleen de tekens die tot op dat punt zijn gelezen, inclusief het nieuwe regelteken. U kunt ook int fscanf(FILE *fp, const char *format, ...) gebruiken functie om strings uit een bestand te lezen, maar stopt met lezen na het tegenkomen van de eerste spatie.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

Wanneer de bovenstaande code is gecompileerd en uitgevoerd, leest het het bestand dat in de vorige sectie is gemaakt en produceert het volgende resultaat −

1 : This
2: is testing for fprintf...

3: This is testing for fputs...

Laten we wat meer in detail bekijken wat hier is gebeurd. Ten eerste, fscanf() lees gewoon Dit omdat het daarna een spatie tegenkwam, tweede oproep is voor fgets() die de resterende regel leest totdat deze het einde van de regel tegenkomt. Eindelijk, de laatste oproep fgets() leest de tweede regel volledig.

Binaire I/O-functies

Er zijn twee functies die kunnen worden gebruikt voor binaire invoer en uitvoer −

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

Beide functies moeten worden gebruikt om geheugenblokken te lezen of te schrijven - meestal arrays of structuren.


C Taal

  1. C Ingang Uitgang (I/O)
  2. C Bestandsverwerking
  3. Python-bestand I/O
  4. Axiomtek:functierijk systeem voor machine vision-toepassingen
  5. acceed:I/O-modules voor schaalbare datacommunicatie
  6. C - Functies
  7. C - Koptekstbestanden
  8. Wat I/O-kaarten zijn en hoe ze werken
  9. MATLAB - Gegevensuitvoer
  10. C# - Bestand I/O
  11. Python - Bestanden I/O