Accesul la biblioteca standard
Fiecare fisier sursa care refera functiile bibliotecii
standard trebuie sa contina linia
#include <stdio.h>
aproape de inceput. Fisierul stdio.h defineste unele macrouri
si variabile folosite de biblioteca I/O. Folosirea semnelor <
si> in loc de obisnuitele ghilimele duble indreapta
compilatorul sa caute fisierul intr-un director continind
informatiile de eticheta standard (pentru UNIX tipic
|usr|include).
Mai departe, ar putea fi necesar ca atunci cind incarca
programul sa se specifice biblioteca in mod explicit; de exemplu
pentru PDP-11 UNIX, comanda pentru compilarea unui program ar fi
cc source files, etc-ls
unde -ls indica incarcarea din biblioteca standard (Caracterul
l este litera el).
7.2. Intrari si iesiri standard-getchar si putchar
Mecanismul cel mai simplu de intrare este de a citi un caracter
la un moment dat de la "standard input", care in general este
terminalul utilizatorului, cu getchar. getchar() returneaza
urmatorul caracter de intrare de cite ori este apelat. In cele
mai multe medii care suporta C, un fisier poate fi substituit
terminalului utilizind conventia <; daca un program "prog"
foloseste getchar, atunci linia de comanda:
prog<infile
determina "prog" sa citeasca "infile" in loc de terminal.
Comutarea intrarii este facuta de o astfel de maniera incit
"prog" insusi nu simte aceasta; in particular, sirul "<infile>" nu
este inclus in argumentele "argv" ale liniei de comanda.
Comutarea intrarii este asadar invizibila daca intrarea vine de la
un alt program via un "pipe mecanisme", linia de comanda
otherprogr|prog
executa ambele programe "otherprogr" si "progr" si aranjeaza
astfel ca intrarea standard pentru "progr" vine de la iesirea
standard a lui "otherprogr".
"getchar" returneza valoarea EOF cind intilneste
sfirsitul fisierului indiferent de ce este citit la intrare.
Biblioteca standard defineste
constanta simbolica EOF ca fiind -
1 ( cu un #define in fisierul stdio.h) dar testele se fac cu EOF
nu cu -1, astfel ca sa fie independent de valoarea specifica.
Pentru iesire, putchar(c) pune caracterul c la iesirea
standard care este terminalul. Iesirea poate fi directata spre un
fisier folosind ">" daca "progr" utilizeaza putchar,
prog>aufile
iesirea standard va fi "outfile" in loc de terminal. In sistemul
UNIX se poate utiliza o comunicatie (pipe) spre alt program:
progr|anotherprogr
comuta iesirea standard a programului "progr" ca intrare standard
a programului "anotherprogr". Si in aceste cazuri "progr" nu are
cunostiinta de redirectare.
Un numar destul de mare de programe au un singur sir de date ca
intrare si un singur sir ca iesire; pentru astfel de
programe I/O cu getchar putchar si printf pot fi in intregime
adecvate, mai ales daca folosim facilitatile de redirectare si
pipe pentru conectarea iesirii unui program cu intrarea altuia. De
exemplu sa consideram programul "lower":
#include <stdio.h>
main() /* convert input to lower case */
Functiile "isupper" si "tolower" sint de fapt macrouri
definite in stdio.h. Macrourile "isupper" testeaza care din
argumentele sale este o litera mare, returnind in acest caz o
valoare non-zero, sau o litera mica returnind in acest caz zero.
Macroul tolower converteste o litera mare in una mica. Indiferent
de cum aceste functii sint implementate pe diferite masini, mediul
lor extern este acelasi, astfel ca prgramele sint scutite de
cunoasterea setului de caractere.
Pentru convertirea unor fisiere multiple se poate folosi un
program la fel ca utilitarul "cat" din UNIX pentru colectarea
fisierelor:
cat file1file2...|lower>output
si aceasta ne permite sa invatam cum se acceseaza fisierele
dintr-un program. ("cat" este prezentat mai tirziu in acest
capitol).
In biblioteca standard I/O functiile getchar si putchar pot
de fapt sa fie macrouri, si aceasta permite ca sa nu fie
apelata o functie pentru fiecare caracter(overhead). Vom arata
aceasta in capitolul 8.