Capitolul 7.2. Intrari si iesiri standard-getchar si putchar

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 7.2. Intrari si iesiri standard-getchar si putchar

Mesaj  zooky la data de Mier Mar 18, 2009 2:33 pm

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 */
{
int c;
while((c=getchar())!=EOF)
putchar(isupper(c)?tolower(c):c);
}
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.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum