1 / 6

Procesarea liniei de comandă

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.

gitano
Download Presentation

Procesarea liniei de comandă

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programare in limbajul C – Cursul 14Procesarea liniei de comandăProf. univ. dr. Constantin Popescu

  2. 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[]) { ... }

  3. 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

  4. 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;

  5. 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; }

  6. 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().

More Related