70 likes | 213 Views
Programare in limbajul C – Cursul 14 Procesarea liniei de comandă Prof. univ. dr. Constantin Popescu. Procesarea liniei de comandă. Limbajul C interpretează linia de comandă ca o secvenţă de cuvinte, de obicei separate de spaţii albe.
E N D
Programare in limbajul C – Cursul 14Procesarea liniei de comandăProf. univ. dr. Constantin Popescu
Procesarea liniei de comandă • Limbajul C interpretează linia de comandă ca o secvenţă de cuvinte, de obicei separate de spaţii albe. • Programul principal poate primi aceste cuvinte ca un tablou de şiruri de caractere, câte un cuvânt pentru fiecare şir de caractere. • De fapt codul de start-up întotdeauna transmite funcţiei main() acest tablou. • Pentru a-l recepţiona tot ceea ce trebuie să facem este să declarăm funcţia main() ca acceptând doi parametrii: int main(int argc, char *argv[]) { ... }
Procesarea liniei de comandă • Primul program pe care îl scriem pentru procesarea liniei de comandă va fi unul care doar afişează argumentele din linia de comandă. #include <stdio.h> int main(int argc, char *argv[]) { int count; printf(“Sunt %d argumente in main\n",argc); for (count=0;count<argc;count++) printf("argv[%d] = %s\n", count,argv[count]); return 0; } • De obicei argv[0] este pointer la numele programului iar primul argument propriu este argv[1]. Linia de comanda: Args What a great day this is Iesire: Sunt 7 argumente in main argv[0] = C:\Documents and Settings\ mi2\apopa\args.exe argv[1] = What argv[2] = a argv[3] = great argv[4] = day argv[5] = this argv[6] = is
Exemplu • Următorul exemplu, care ilustrează funcţia fopen şi tehnicile de intrare - ieşire pe fişiere prezentate în capitolul precedent, copiază unul sau mai multe fişiere la ieşirea standard. • Cum ieşirea standard este implicit ecranul, acesta este un program util pentru afişarea fişierelor. • Este analog cu comanda Unix cat şi cu comanda MS-DOS type. #include <stdio.h> int main(int argc, char *argv[]) { int i; FILE *fp; int c;
Exemplu for(i = 1; i < argc; i++) { fp = fopen(argv[i], "r"); if(fp == NULL) { fprintf(stderr, "cat: nu pot deschide %s\n", argv[i]); continue; } while((c = getc(fp)) != EOF) putchar(c); fclose(fp); } return 0; }
Procesarea liniei de comandă • Comanda Unix cat are acest nume pentru că poate fi folosită pentru a concatena două sau mai multe fişiere astfel: cat a b > c • Acesta este un exemplu bun care ilustrează necesiatatea scrierii mesajelor de eroare în stderr, pentru a nu fi redirectate în fişier. • Mesajul "nu pot deschide" din exemplul de mai sus cuprinde şi numele programului şi numele fişierului. • Pentru problemele legate de sistemul de operare, cum ar fi imposibilitatea de a deschide un fişier, este stocat un cod care indică eroare în variabila globală errno. • Funcţia strerror din biblioteca standard va converti valoarea errno într-un şir de caractere care descie eroarea în cuvinte. • Astfel un mesaj de eroare mai complet ar fi: fp = fopen(argv[i], "r"); if(fp == NULL) fprintf(stderr, "cat: nu pot deschide %s: %s\n",argv[i],strerror(errno)); • Dacă folosim astfel de cod, trebuie să includem în fişierul sursă fişierele header <errno.h> pentru errno şi <string.h> pentru strerror().