Dragoş Acostăchioaie

Programare C şi C++ pentru Linux

Editura Polirom ©2002

Prefaţă

Avându-şi rădăcinile în anii de început ai descoperirilor ştiinţei calculatoarelor moderne, limbajul C, sistemul de operare UNIX şi Internet-ul se întrepătrund, astfel că nici unul dintre ele nu ar fiinţa fără celelalte două.

Apariţia sistemului Linux a constituit un nou imbold în cadrul evoluţiei UNIX-ului şi a curentului open source. Totul se bazează pe un fundament numit cooperare, care în definitiv se bazează pe oameni. Cercetători ca Thompson, Brian Kerninghan, Dennis Ritchie şi Bjarne Stroustrup, iar mai târziu Richard Stallman şi Linus Torvalds, au înţeles că rezultatele ştiinţei trebuie împărtăşite cu ceilalţi, membrii comunităţii.

Fenomenul open source nu a condus doar la elaborarea unui număr uriaş de programe de calitate, liber disponibile prin intermediul Internet-ului. Acest curent a schimbat mentalitatea oamenilor, de a gândi nu egoist, ci în folosul unei comunităţi.

Concomitent cu multiplele posibilităţi de utilizare ca server, sistem personal sau la birou, Linux este o platformă ideală pentru dezvoltarea de programe. Instrumentele de programare GNU îşi au originile în anii '80, ele nefiind inventate la comandă, ci izvorăsc din nevoile programatorilor de a-şi uşura munca.

Puterea instrumentelor GNU pentru mediile UNIX rezidă în capacitatea extraordinară a acestora de a interacţiona între ele. Ideea nu este de a construi un monoliţi complecşi, greu de întreţinut, de dezvoltat, care rezolvă toate problemele, ci multe componente mici, făcute să comunice între ele într-un mod natural, standardizat. Un mediu integrat, spre exemplu, nu implementează un depanator propriu, ci utilizează programul GDB, permiţând manipularea acestuia prin comenzi vizuale, dar oferind totodată accesul la linia de comandă. Într-un mod similar este si suportul pentru CVS şi aşa mai departe.


Lucrarea prezintă principalele instrumente şi medii de programare existente în sistemele de operare Linux şi UNIX, în special pentru limbajele C şi C++. De asemenea, cartea trece în revistă noţiunile de bază ale programării C şi C++ şi particularităţile acesteia pe sistemele Linux.

Cartea conţine şi o prezentare a fenomenului open source, îndemnând cititorul să utilizeze software liber, şi chiar să contribuie activ la dezvoltarea acestora.


Aşteptăm reacţiile, remarcile şi eventualele observaţii sau corecţii pe adresa dragos[at]unixinside[dot]org. De asemenea, invităm cititorul să viziteze pagina dedicată acestui volum, http://www.unixinside.org/prg


Structură generală

Prima parte cuprinde noţiunile de bază ale programării în limbajul C. Partea a doua tratează elementele esenţiale ale programării în limbajul C++. Ambele părţi conţin numeroase exemple şi o serie de probleme propuse. Partea a treia prezintă principalele instrumente de programare din mediile Linux şi UNIX, cum ar fi compilatoarele - GCC, G++, instrumentele pentru depanarea programelor - GDB, pentru automatizarea compilării şi realizarea de programe complexe - make, autoconf, automake, libtool sau cele destinate lucrului în echipă - CVS. Sunt prezentate de asemenea o serie de medii integrate de dezvoltare existente pe platformele menţionate.

Lucrarea include o listă de referinţe bibliografice pe care le recomandăm pentru însuşirea temeinică şi aprofundarea limbajelor C şi C++.


Cui se adresează această carte

Cartea se adresează atât studenţilor şi elevilor care urmează cursuri de programare, cât şi specialiştilor în programare, care doresc fie să înveţe sau să utilizeze platforma Linux, fie să îşi porteze programele pe aceasta.


Convenţii utilizate în această carte

Bold este utilizat pentru opţiuni, cuvinte cheie etc., pentru a fi scoase în evidenţă.

Italic este utilizat pentru nume de variabile, constante, cuvinte cheie etc., care vor trebui în general să fie înlocuite cu valoarea lor reală de către utilizator.

Courier este folosit pentru nume de comenzi, de fişiere, de utilizatori sau grupuri, precum şi pentru texte care trebuie tastate efectiv de către utilizator. Este de asemenea utilizat pentru conţinutul unui fişier sau ieşirea unor comenzi, în cadrul exemplelor.

| semnifică SAU logic. Astfel, opţiune1 | opţiune2 înseamnă "fie opţiune1 fie opţiune2".

[ ... ] semnifică un text opţional, deci care nu este obligatoriu de folosit.

... semnifică o porţiune de text care a fost omisă pentru a nu îngreuna lizibilitatea sau pentru a reduce din spaţiul utilizat.

# este promptul implicit al interpretorului de comenzi pentru utilizatorul root.


Cum a fost scris acest material

Această lucrare a fost realizată în HTML 4, utilizând doar programe open source: Red Hat Linux 7.3, GNU Emacs, XFig, Mozilla, Konqueror, GIMP.

Programele au fost compilate cu GCC şi EGCS.


Mulţumiri

Doresc să îmi exprim recunoştinţa pentru ajutorul acordat în corectarea şi definitivarea acestei cărţi conf. dr. Dorel Lucanu, precum şi colaboratorilor - în acelaşi timp prietenilor - Sabin Buraga şi Mihaela Brut. Mulţumesc de asemenea primului meu dascăl de C, conf. dr. Claudia Botez.


Autorul
Iaşi, septembrie 2002