Notiuni de sisteme de operare si retele de calculatoare (Linux)
L. Miclea all right reserved Vers. 2.0 I.8.1
8. Programarea n Linux Cuprins: - Programarea n C si C++ - Programarea n PERL - Alte limbaje de programare sub Linux
2 I.8 Programarea n C si C++ - ANSI C (1983) - Fisiere header: stdio.h, math.h, - compilator: gcc - comenzi pentru aplicatii mari: make, pmake (make paralel), imake (utilizat pentru aplicatii X11), automake, autconf - comanda make: . actualizeaza si construieste automat aplicatii . Apel: make [-f MyMakeFile ] . Fisierul MyMakefile (implicit Makefile) este un fisier text care contine instructiuni de apel a compilatorului si editorului de legaturi . Pentru a executa o anumita componenta a fisierului makefile se pot utiliza definitii tinta (instal, test, man, clean, archive, bugreport) - managementul proiectelor software mari: . RCS (Revision System Control) . CVS (Concurrent Versions System)
3 I.8 - bibliotecar (arhivar): ar Ex. ar c bibl.a f1.o f2.0 f3.o gcc -o prg prgprinc.c bibl.a - C++ - extensie a limbajului C pentru programarea orientata pe obiect; pentru dezvoltarea de aplicatii grafice - compilatorul egcs (pronuntat eggs) - implicit pt. C si C++ la Red Hat 6.0; similar cu gcc - UNIX a fost scris n limbajul C; tendinta este de a fi rescris n C++
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.2 4 I.8 - comanda make (cont) Exemplu de fisier Makefile: CC= gcc INS= install INSDIR = /usr/local/bin LIBDIR = -L/usr/X11R6/lib LIBS = -lXm -lSM -lICE -lXt -lX11 SRC = model.c OBJS = model.o PROG = model model: ${OBJS} ${CC} -o ${PROG} ${SRC} ${LIBDIR} ${LIBS} instal: ${PROG} ${INS} -g root -o root ${PROG} ${INSDIR} - tipuri de apel: # make # make model - doar construire executabil # make instal - construire si instalare program
5 I.8 Compilare gcc optiuni <fisier1> Optiuni mai importante: -x limbaj - specifica limbajul (C, C++, assembler) -c - doar compilare si asamblare (rezulta *.o) -S - doar compilare (rezulta <fisier>.s -E - doar preprocesare (inserare *.h si macro) -o fisier - specificare fisier de iesire (implicit a.out) -l biblioteca - specificare biblioteca utilizata -I director - cauta directorul specificat pentru fisierele incluse -w - inhiba mesajele de averizare -pendantic - strict conform cu ANSI C -Wall - imprima mesaje de avertizare suplimentare -g - include informatii de depanare (pentru utilizare cu gdb) -ggbd - genereaza informatii de depanare n format gbd -p - produce informatii cerute de prof -pg - produce informatii cerute de gprof -o - optimizare cod obiect
6 I.8 Exemple 1. first.c #include <stdio.h> void main () { printf("\nHello world\n"); } Compilare + Linkeditare gcc first.c sau gcc -o primul first.c Executie ./a.out sau ./primul
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.3 7 I.8 Exemple (cont) 2. calc_axy - calculeaza A(n,k) pentru n=1..170, k=0..n // axy.c double aranjamente (int x, int y) { // calc. si ret. numarul aranjamentelor de x obiecte luate cate y double a; int i; if(x<1 || x>170) return -1.0; if(y<1 || y>x) return -1.0; a= 1.0; i= x-y+1; while(i<=x) a *= i++; return a; }
8 I.8 calc_axy (cont) // calc_axy.c #include <stdio.h> /* #include <conio.h> */ /* #include "axy.c" */ double aranjamente(int,int); #define NMAX 20 /* maximum 170 */ void main() { /* calc. si afis. nr. aranjamentelor de n obiecte luate cate k, pentru n in intervalul [1,NMAX] si k in intervalul [1,n] */ int k,n; for(n=1; n<= NMAX; n++) { printf("actionati o tasta pentru continuare\n"); getc (stdin); printf("\nn= %d\n",n); for(k=1; k<=n; k++) { printf("\tA(%d,%d)=%g\n",n,k,aranjamente(n,k)); if(k%22 == 0) { printf("actionati o tasta pentru continuare\n"); getc(stdin); } } }
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.4 10 I.8 1. Introducere - dezvoltat la mijlocul anilor '80 de Larry Wall - este un limbaj interpretat - dupa aparitia WWW, la nceputul anilor '90, Perl a devenit limbajul cel mai uzitat pentru programarea CGI (Common Gateway Interface) - recentul interes pentru miscarea Open Source a facut ca Perl sa aiba cel putin atta pres a ct Linux - Perl - sa faci usor lucrurile usoare si sa faci posibile lucrurile grele - nu trebuie sa te gndesti la lucruri ca alocarea memoriei si tipul variabilelor - contine cele mai bune caracteristici ale limbajelor C, Basic si ale altor limbaje, mai ales ale limbajelor "awk", "sed" si "shell" - avantaj: poate procesa fisiere binare Programarea n Perl (Practical Extraction and Report Language)
11 I.8 Programarea n Perl (cont) - Moto (neoficial): "in Perl exista mai multe moduri de a face un lucru (TIMTOWTDI - there is more than one way to do it)" - O versiune de Perl vine cu majoritatea distributiilor Linux. - Se poate determina versiunea instalata cu comanda: perl -v - Interpretorul . vine cu distributia . download http://www.prel.com/ 2. Un program Perl simplu -------------------------------------- #!/usr/bin/perl print Look at all the camels!\n"; -------------------------------------- - se editeaza n fisierul ex1.pl - chmod +x ex1.pl - executia: perl ex1.pl
12 I.8 Programarea n Perl (cont) Observatii. - caracterul # nseamna comentariu pna la sfrsitul liniei curente; exceptii: - cnd este ntr-un sir - cnd este utilizat ca delimitator ntr-o expresie regulata - linia #! - spune shell-ului unde sa caute executabilul pentru lansarea programului; aceasta este o practica standard n programarea shell - se poate afla localizarea Perl, cu comanda: which perl - propozitiile Perl se termina cu caracterul ; si se pot ntinde pe mai multe linii; mai multe propozitii Perl pot fi pe aceeasi linie - n instalarea Perl este inclus un document denumit "perlfunc", care contine toate functiile disponibile si utilizarea lor - vizualizare: perldoc perlfunc http://www.cpan.org/doc/manual/html/pod/perlfunc.html - Informatii despre comanda perldoc: perldoc perldoc - Informatii despre Perl (doua variante): perldoc perl sau man perl
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.5 13 I.8 Programarea n Perl (cont) 3. Variabile si structuri de date Perl - n Perl nu trebuie declarat tipul variabilelor - variabilele Perl au tipul pe care trebuie sa-l aiba si si pot schimba tipul daca se doresc - sunt 3 tipuri: scalare, tablouri si structuri (hash) 3.1. Variabile scalare - numele ncepe cu caracterul $ ex: $pinguin - pot fi numerice sau siruri de caractere (string) - si pot schimba tipul; daca un numar este tratat ca un string, atunci este string; daca un string este tratat ca un numar, el va fi convertit ca numar daca asta are sens, altfel va fi probabil evaluat ca zero; Ex: "76sir" va fi evaluat ca numarul 76 "urs polar" va fi evaluat ca 0
14 I.8 Programarea n Perl (cont) 3.2. Tablouri (arrays) - numele ncepe cu caracterul @ ex: @peste - un tablou este o lista de valori referite prin index numeric, ncepnd cu indicele 0 - fiecare element al tabloului este o valoare scalara; numele unui element al tabloului ncepe cu caracterul $ ex: $peste[2] 3.3. Structuri (hashes) - numele ncepe cu caracterul % ex. %angajat - este o lista de perechi nume-valoare - elementele individuale sunt referite prin nume si ncep cu caracterul $ ex. $angajat{nume} - functii utile (vezi ex2.pl): keys - returneaza un tablou continnd toate cheile structurii values - returneaza un tablou cu valorile structurii
15 I.8 Programarea n Perl (cont) Ex2.pl - afiseaza variabilele ambientale #!/usr/bin/perl foreach $key (keys %ENV) { print "$key = $ENV{$key}\n"; } 3.4. Variabile speciale - o mare varietate - $_ - variabila implicita; se utilizeaza cnd nu se specifica argument; Ex: chomp; este echivalent cu chomp($_); - $! - mesajul de eroare returnat de sistemul de operare - $] - numarul versiunii Perl Urmatoarele doua bucle sunt egale: for $vaca (@vite) { for (@vite) { print "$vaca face moo.\n"; print "$_ face moo.\m"; } } - lista completa a variabilelor se poate afla cu comanda perldoc perlvar sau la adresa http://www.cpan.org/doc/manual/html/pod/perlvar.html
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.6 16 I.8 Programarea n Perl (cont) 4. Operatori - categorii: de comparare, de compunere, aritmetici si constante sir speciale 4.1. Operatori de comparare - sunt similari cu cei din C, awk si shell UNIX - se folosesc cel mai adesea n fraze if sau bucle - Perl are operatori de comparare pentru numere si siruri - operatorii pentru comparatii numerice: ==, <, >, <=, >=, !=, .. (variatie ntre >= primul operand la <= al doilea operand), <=> (returneaza -1 daca mai mic dect, 0 dac egal, si 1 daca mai mare decat) - operatori pentru comparatii de siruri: eq (egal), lt (mai mic dect), gt (mai mare dect), le (mai mic sau egal cu), ge (mai mare sau egal cu), ne (diferit), cmp (returneaza -1 daca mai mic dect, 0 daca egal cu, si 1 daca mai mare dect), =- (potrivire de expresii regulate), !- (nepotrivire de expresii regulate)
17 I.8 Programarea n Perl (cont) 4.2. Operatori de compunere - sunt similari cu cei din C, awk si shell UNIX - sunt notatii utilizate pentru a combina alte operatii ntr-o forma logica complexa - operatori: && (SI logic), || (SAU logic), ! (NU logic), () (paranteze; utilizate pentru a grupa fraze compuse),
18 I.8 Programarea n Perl (cont) 4.3. Operatori aritmetici Operator Scop x**y x la puterea y (la fel ca x^y) x%y restul mpartirii x/y x+y aduna x la y x-y scade y din x x*y nmultire x cu y x/y mparte x la y -y schimba semnul lui y (minus unar) ++y incrementare y cu 1 si apoi utilizeaza valoarea y++ utilizare valoare y si apoi incrementare cu 1 --y decrementare y cu 1 si apoi utilizeaza valoarea y-- utilizare valoare y si apoi decrementare cu 1 x=y atribuie lui x valoarea lui y. Sunt suportati si operatorii +=, -=, *=, /=, %=, **=, etc - n propozitiile aritmetice se pot utiliza de asemenea operatori de comparatie si de compunere. Acesti operatori iau valoarea 0 pentru false si 1 pentru true
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.7 19 I.8 Programarea n Perl (cont) 4.4. Alti operatori Operator Scop -y NU pe biti (schimba bitii 0 in 1 si bitii 1 in 0) x & y SI pe biti x | y SAU pe biti x ^ y SAU EXCLUSIV pe biti x << y deplasare stnga a lui x cu y biti x >> y deplasare dreapta a lui x cu y biti x . y concatenare y la x a x b repeta sirul a de b ori x , y evalueaza x apoi y x ? y : z expresie conditionala -daca x este T evalueaza y, altfel z - n afara operatorului virgula, ceilalti operatori se pot combina cu operatorul de atribuire Ex: x&=y
20 I.8 Programarea n Perl (cont) 4.5. Constante sir speciale Expresia Sens \\ \ \a BEL \b BS \cC Ctrl/C \e ESC \f FF \n NL \r CR \t TAB orizontal \v TAB vertical \xNN indica ca NN este numar hexazecimal \0NNN indica ca NNN este numar octal
21 I.8 Programarea n Perl (cont) 5. Frazele conditionale: if/else si unless 5.1. Fraza if if(conditie) { fraza sau bloc de cod } elsif (conditie) { fraza sau bloc de cod } else { fraza sau bloc de cod } - conditie poate fi o fraza care returneaza o valoare true sau false - True n Perl este orice altceva diferit de 0 (cifra 0), "0", "" sau o valoare nedefinita.
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.8 22 I.8 Programarea n Perl (cont) - Autorul Perl este un lingvist de aceea limbajul contine multe cai de exprimare (TIMTOWTDI), specifice englezei vorbite. n plus autorul mbunatateste continuu limbajul cu noile expresii uzitate si le elimina pe cele nefolosite. Ex. Se poate spune: if($nume eq "Ion") { print "Servus Ioane!\n"; } Alternativ, se poate spune: print "Salut Ioane\n" if $nume eq "Ion"; 5.2. Fraza unless - este inversa lui if - prelucreaza fraza sau blocul daca conditia este falsa Ex. unless ($nume eq "Ion") { print "Pleaca, nu esti primit aici!\n";} sau print "Pleaca!\n" unless $nume eq "Ion";
23 I.8 Programarea n Perl (cont) 6. Bucle - o bucla este o modalitate de a face ceva de mai multe ori - constructii de buclare: for, foreach, while si until 6.1. Bucla for - executa a fraza (bloc de cod) pentru un set de conditii definite astfel: for (conditia de start; conditia de final; functia increment) { fraza } - conditia de start este setata la nceputul buclei; de fiecare data dupa executia buclei se evalueaza functia de incrementare pna cnd conditia de final este ndeplinita Ex: for ($i=1; $i<=10; $i++) { print "$i\n"; }
24 I.8 Programarea n Perl (cont) 6.2. Bucla foreach - prelucreaza o fraza (bloc) pentru fiecare element al unei liste sau al unui tablou Ex. foreach $name (@names) { print "$name\n"; } - variabila buclei ($name n exemplu) nu este setata valorii elementului ci este conectata cu elementul; aceasta nseamna ca o modificare a variabilei buclei nseamna modificarea tabloului - daca nu se specifica o variabila a buclei, se utilizeaza variabila implicita $_: for (@names) { print "$_ a fost aici\n"; } - aceasta sintaxa poate fi foarte convenabila dar poate duce la un cod dificil de citit si deci de ntretinut - foreach este adesea abreviat ca for
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.9 25 I.8 Programarea n Perl (cont) 6.3. Bucla while - prelucreaza un bloc atta timp ct o anumita conditie este ndeplinita Ex. while ($x<10) { print "$x\n"; $x++; } - conditia poate fi orice returneaza o valoare true sau false, deci poate fi si un apel de functie while (InvalidPassword($user, $password) ) { print " Parola invalida. ncercati din nou\n"; $password = GetPassword; }
26 I.8 Programarea n Perl (cont) 6.4. Bucla until - este opusul frazei while; prelucreaza un bloc pna ce conditia devine true Ex. until (ValidPassword($user, $password) ) { print " Parola invalida. ncercati din nou\n"; $password = GetPassword; } 6.5. last si next - last - permite iesirea fortata dintr-o bucla (similar cu break din C) - next - salt peste restul buclei (similar cu continue din C) - nu lucreaza cu do while 6.6. do whilesi do until - verificarea conditiei se face la sfrsitul buclei - bucla se executa cel putin o data
27 I.8 Programarea n Perl (cont) 7. Expresii regulate - marea putere a lui Perl este n manipularea textelor si a fisierelor - se utilizeaza biblioteca de expresii regulate (regex) - regex permit ca verificarea potrivirii cu un sablon si nlocuirea sa se faca usor si eficient Ex. nlocuirea oricarei aparitii a sirului ion sau a sirului maria cu sirul vasile ntr-o linie de text: $sir =~ s/ion|maria/vasile/gi; unde: . $sir =~ - operatia de cautare se face asupra textului pastrat n variabila $sir . s - substituire . g - substitutie globala (de cte ori apare) . i - textul NU este case-senzitiv
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.10 28 I.8 Programarea n Perl (cont) 8. Acces la shell - Perl este util pentru functii administrative din urmatoarele motive: 1. are acces la comenzi shell utiliznd sintaxa ` ` (tasta de deasupra tastei TAB) Ex. $dir_curent = `pwd`; @listare = `ls -la`; print Listare pentru $dir_curent\n; foreach $fisier (@listare) { print $fisier; } 2. Modulul Shell (este n distributia Perl) permite acces la shell: Ex. use Shell qw(cp); cp (/home/httpd/logs/access.log, /tmp/httpd.log); 3. Acces la shell prin intermediul functiei system: Ex. $rc=0xffff & system(cp /home/httpd/logs/access.log /tmp/httpd.log` ) ; if ($rc == 0) { print cp sistem efectuat \n); } else { print cp sistem esuat \n); }_
29 I.8 Programarea n Perl (cont) 9. Optiuni (selectie) - pot apare n linia de comanda sau n linia #! de la nceputul programului -0[cifre] - specifica separatorul de intrare ($/) ca fiind un numar octal; implicit este NL; 00 specifica citirea unui paragraf/articol de fisier - e linie_de_comanda - urmeaza cod Perl -v - afiseaza versiunea Perl 10. CPAN (Comprehensive Perl Archive Network) - mii de module Perl care pot fi utilizate - la http://www.perl.com/CPAN/ se gaseste CPAN Multiplex Dispatcher - dispecer care va ajuta sa gasiti modulul dorit - lista modulelor instalate # perldoc perlmodlib
30 I.8 Alte limbaje de programare sub Linux - Shell - nlantuire de comenzi Linux - Motif - programare sub X11 - gawc (GNU awk - Aho, Weinberger, Kernighan) - creare de rapoarte - tcl si tk - creare interfete grafice sub X11 - Python - orientat pe obiect; dezvoltare rapida de aplicatii - Java - obiectual
Notiuni de sisteme de operare si retele de calculatoare (Linux) L. Miclea all right reserved Vers. 2.0 I.8.11