Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

Capitolul 7.7. Tratarea erorilor -stderr si exit

In jos

Capitolul 7.7. Tratarea erorilor -stderr si exit Empty Capitolul 7.7. Tratarea erorilor -stderr si exit

Mesaj  zooky Mier Mar 18, 2009 2:35 pm

Tratamentul erorilor in cat nu este ideal. Problema este ca daca unul d din fisiere nu poate fi accesat din vreun motiv oarecare, diagnosticul erorii este tiparit numai la sfirsitul iesirii concatenate. Aceasta este aceptabil dacaiesirea se face pe un terminal, dar este rau daca iesirea este un fisier sau un alt program via o pipeline.

Pentru a trata aceasta situatie maibine, un al doilea fisier de iesire numit stderr este asignat programului, la fel castdin si stdout. Daca e este posibil, stderr apare pe terminalul utilizatorului chiar daca iesirea standard este redirectata.

Sa revizuim programl cat in asa fel ca mesajele de eroare sa apara in fisierul standard de erori

#include <stdio.h>
main(argc, argv) /* cat: concatenate files *?
int argc:
char *argv[];
{
FILE*fp, *fopen();
if(argc==1) /* no args: ; copy standard input */
filecopy(stdiu);
else
while(--argc>0)
if((fp=fopen(*++argv, "r"))==NULL){
fprintf(stderr, "cat:can't open%s`n", *argv);
}else{
filecopy(fp);{
fclose(fp);
}
exit(0);
}

Programul semnaleaza erorile in doua feluri. Diagnosticul de iesire produs de catre fprintf merge in stderr, astfel el gaseste drumul catre terminalul utilizatorului in loc sa dispara printr-un pipeline sau fisier de iesire.

Programul de asemenea utilizeaza si functia exit din biblioteca standard care termina executia programului cind este apelata. Argumentul lui exit este utilizabil de catre orice proces care il apeleaza, astfel succesul sau esecul programului poate fi testat de un alt program pentru care cel dinainte este un subprogram. Prin conventie returnarea valorii 0 semnaleaza ca totul ste OK, iar diferite valori nonzero semnifica situatii anormale.

exit apeleaza fclose pentru fiecare fisier deschis in iesire pentru a curata bufferul, apoi cheama rutina numita -exit. Functia exit determina terminarea imediata fara curatarea bufferului desigur exit poate fi apelata si direct.
zooky
zooky
Moderator
Moderator

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

https://e-learning.forumgratuit.ro

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum