Sunteți pe pagina 1din 11

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); }
}
}



9 I.8
calc_axy (cont)
Fisierul Makefile
CC = gcc -g -c -o
GCC = gcc -g -o
OBJS = axy.o calc_axy.o
calc_axy : $(OBJS)
$(GCC) calc_axy $(OBJS)
axy.o : axy.c
$(CC) axy.o axy.c
calc_axy.o : calc_axy.c
$(CC) calc_axy.o calc_axy.c
clean :
rm *.o
rm *.*~
Compilare + Linkeditare
make
Executie
./calc_axy



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

S-ar putea să vă placă și