Parametrii liniei de comanda. - PowerPoint PPT Presentation

1 / 17
About This Presentation
Title:

Parametrii liniei de comanda.

Description:

Title: PowerPoint Presentation Last modified by: viorga Created Date: 1/1/1601 12:00:00 AM Document presentation format: On-screen Show Other titles – PowerPoint PPT presentation

Number of Views:32
Avg rating:3.0/5.0
Slides: 18
Provided by: club87
Category:

less

Transcript and Presenter's Notes

Title: Parametrii liniei de comanda.


1
Parametrii liniei de comanda.
  • Un program executabil (o comanda) poate fi lansat
    în executie de catre interpretorul de comenzi al
    sistemului de operare.
  • De exemplu, programul salut.exe care afiseaza la
    terminal mesajul Buna ziua! este o comanda
    fara parametrii, lansata în executie prin
  • gtsalut
  • O comanda poate avea si parametri, care apar dupa
    numele comenzii si sunt separati prin spatii
    libere.
  • De exemplu programul salut.exe ar putea avea un
    parametru sir de caractere, care sa specifice un
    anumit mesaj, fiind lansat în executie, în acest
    caz prin
  • gt salut mesaj

2
Parametrii liniei de comanda
  • Un program care copiaza un fisier acesta ar avea
    doi parametri, desemnând fisierele sursa si
    destinatie (siruri de caractere )
  • gtcopiere sursa.dat dest.dat
  • Programul poate avea acces la parametrii liniei
    de comanda, daca functia main() prezinta
    argumente
  • void main(int argc, char argv)
  • Primul argument, argc (argumentul contor) este un
    întreg care reprezinta numarul de parametri ai
    comenzii.
  • Al doilea argument, argv (argumentul vector) este
    un pointer la un tablou de pointeri la siruri de
    caractere, care contin argumentele (câte un
    argument pe sir de caractere).

3
Parametrii liniei de comanda.
4
Parametrii liniei de comanda
  • argv0 contine întotdeauna numele programului,
    astfel încât pentru o comanda fara parametri
    argc1, iar o comanda cu 2 parametri va avea
    argc3.
  • argv1 contine primul parametru,
  • argv2 pe cel de-al doilea,
  • argvargc-1 va contine ultimul parametru,
  • argvargc va fi un pointer la un sir vid (NULL).
  • Exemplul Sa se copieze la iesire fisierele date
    ca parametri ai comenzii. Daca nu avem parametri
    se copiaza fisierul standard de intrare (stdin).

5
Exemplul 1 Copierea unui fisier.
  • include ltstdio.hgt
  • void copy(FILE , FILE )
  • main(int argc, char argv)
  • FILE pf
  • if(argc1)
  • copy(stdin, stdout)
  • else
  • while(--argc)
  • if((pffopen(argv,r))NULL)
  • fprintf(stderr,Eroare deschidere s\n,
  • argv)
  • return 1
  • else

6
Exemplul 1 Copierea unui fisier.
  • copy(pf, stdout)
  • fclose(pf)
  • return 0
  • void copy(FILE s, FILE d)
  • int c
  • while((cgetc(s))!EOF)
  • putc(c, d)

7
Functii cu numar variabil de parametri.
  • Functiile C pot fi apelate cu numar variabil de
    parametri actuali. (de exemplu functiile printf()
    si scanf() ).
  • Programatorul îsi poate scrie propriile functii
    cu numar variabil de parametri, folosind
    macroinstructiunile din fisierul antet
    ltstdarg.hgt.
  • O functie cu numar variabil de parametri va avea
    prototipul
  • tip nume (lista_fixa_parametri, )
  • Lista fixa de parametri trebuie sa fie nevida,
    deci numarul de parametri va fi mai mare sau egal
    cu numarul de parametri ficsi.
  • Parametrii care sunt în numar variabil sunt
    convertiti implicit ca tip, si anume
  • toti întregii la int
  • toti realii la double

8
Functii cu numar variabil de parametri.
  • Fisierul antet ltstdarg.hgt contine definitii
    pentru tipul va_list. Argumentele variabile vor
    fi accesate printr-o variabila pointer pa,
    declarata astfel
  • va_list pa
  • Initializarea pointerului de acces la argumentele
    variabile -pa se face folosind macroinstructiunea
    va_start() , indicând adresa ultimului parametru
    fix lastarg
  • va_start(pa, lastarg)
  • Pentru parcurgerea listei de argumente variabile
    se va folosi macroinstructiunea va_arg(), care
    actualizeaza pointerul de acces la argumente pa,
    pentru a indica urmatorul argument int sau
    double, si întoarce ca rezultat argumentul curent
    din lista de parametri variabili

9
Functii cu numar variabil de parametri.
  • vintva_arg(pa, int)
  • sau
  • vrealva_arg(pa, double)
  • Oprirea procesului repetitiv se face folosind
    informatiile despre parametrii ficsi (în vârful
    stivei se va afla pointerul la format). Dupa
    ultimul parametru variabil extras se apeleaza
    macroinstructiunea
  • va_end(pa)
  • Exemplul 2 Scrieti o functie care afiseaza un
    numar variabil de siruri de caractere (cel mult
    max).

10
Exemplul 2.
  • include ltstdio.hgt
  • include ltstdarg.hgt
  • int printvar(int max, )
  • void main(void)
  • printvar(3,Ion,Vasile,Mihai)
  • printf(\n)
  • printvar(5,marti,joi,luni,
  • vineri,duminica)
  • printf(\n)

11
Exemplul 2.
  • void printvar(int max,)
  • va_list pa
  • int narg0
  • char siruri10
  • va_start(pa,max)
  • while(narg lt max)
  • sirurinargva_arg(pa, char)
  • printf(s \n, sirurinarg)
  • va_end(pa)

12
Functii cu numar variabil de parametri.
  • Extragerea argumentelor variabile, poate fi
    facuta, si cu alte functii, în loc de va_arg().
    În acest scop se folosesc functiile vprintf(),
    vfprintf() si vsprintf(). Acestea au
    prototipurile
  • int vprintf(char format, va_list pa)
  • afiseaza, sub controlul formatului, la iesirea
    standard, un numar variabil de argumente,
    accesate prin pointerul pa
  • întoarce numarul de octeti afisati (rezultat
    negativ la eroare)
  • int vfprintf(FILE fis, char format, va_list
    pa)
  • afiseaza, sub controlul formatului, în fisierul
    fis, un numar variabil de argumente, accesate
    prin pointerul pa
  • întoarce numarul de octeti afisati (rezultat
    negativ la eroare)

13
Exemplul 3.
  • include ltstdio.hgt
  • include ltstdarg.hgt
  • define NUMEFIS fis.dat
  • void printvar(FILE f, char fmt, )
  • int main()
  • FILE f1
  • fmt1s s s\n
  • f1fopen(NUMEFIS, w)
  • printvar(f1,fmt1,Ion,Vasile,Mihai)
  • fclose(f1)
  • return 0

14
Functii cu numar variabil de parametri.
  • void printvar(FILE f, char fmt,)
  • va_list pa
  • va_start(pa,fmt)
  • vfprintf(f, fmt, pa)
  • va_end(pa)
  • int vsprintf(char sir, char format, va_list
    pa)
  • afiseaza, sub controlul formatului, în sirul de
    caractere sir, un numar variabil de argumente,
    accesate prin pointerul pa

15
Exemplul 4.
  • Exemplul 4 Scrieti o functie cu numar variabil
    de parametri, care simuleaza functia printf(),
    acceptând parametri variabili de tip int, double
    sau sir de caractere.
  • include ltstdio.hgt
  • include ltstdarg.hgt
  • void printvar(char fmt,)
  • va_list pa
  • char p, psir
  • int i
  • double d
  • va_start(pa,fmt)

16
Exemplul 4.
  • for (pfmt p p)
  • if(p!)
  • putchar(p)
  • continue
  • switch(p)
  • case d
  • iva_arg(pa, int)
  • printf(d,i)
  • break
  • case f
  • dva_arg(pa, double)
  • printf(lf,d)
  • break

17
Exemplul 4.
  • case s
  • for (psirva_arg(pa,char)
  • psirpsir)
  • putchar(psir)
  • break
  • default
  • putchar(p)
  • break
  • va_end(pa)
Write a Comment
User Comments (0)
About PowerShow.com