Appendix B. Input/output på C:s vis

Innehållsförteckning
Introduktion
Utskrift till skärm
Utskrift till filer
Inläsning från tangentbordet
Inläsning från fil
I/O på låg nivå

Detta kapitel behandlar hur man sköter input/output i C. Denna funktionalitet kan även användas i C++ om så skulle behövas.

Introduktion

Alla exempelprogram i detta kompendium har använt sig av de former för input och output som finns i C++. Dessa skiljer sig väldigt mycket från det som traditionellt använts i C, och vi skall nu se på hur man kan hantera I/O i C. Alla former av I/O som är giltig C är även giltig C++, så följdaktligen kan man skapa ny C++-program som använder sig av C:s I/O-rutiner.

Buffring

Även data som läses och skrivs i C använder sig av buffring, vilket kan leda till oväntade resultat för olika operationer omman inte är medveten om buffringen. Läs mera om buffring i avsnittet Streams och buffring i Kapitel 8.

Headerfiler

Alla former av I/O-funktioner i C finns definierade i headerfilen <stdio.h> (eller <cstdio> enligt C++-standarden). Det räcker för det mesta med att inkludera denna fil för att använda sig av C:s I/O funktioner.

Konceptet med filer

Allting i C som man kan läsa och skriva till är filer. I C++ är alltig streams. Dessa skiljer sig konceptuellt inte speciellt mycket från varandra, men sättet som de används är helt olika. Vissa funktioner använder sig av namnet stream för parametrar, men det är dock alltså inte frågan om C++-streams.

Man kan skriva data till olika filer i C. Dessa är:

  • skärmen som betecknas standard output, och motsvaras av cout i C++. All output går till denna fil om inte annat anges.

  • errorfilen som betecknas standard error och motsvaras av cerr i C++. Denna används för felmeddelanden.

  • filer som är normala fysiska filer på disken.

I C kan man läsa data från:

  • tangentbordet som betecknas standard input.

  • filer som är normala fysiska filer på disken.

Man har gett standard output, standard input och standard error kortare namn somanvänds då man anger att man vill läsa eller skriva från/till dem. Dessa är stdin, stdout och stderr. Egentligen är dessa globala variabler som finns definierade i och med att man inkluderat <stdio.h>, precis som cout, cin och cerr i C++. Varje I/O-operation som utförs måste alltid använda sig av någon av ovanstående fördefinierade filer, eller så en fysisk fil på disken.