Utilizarea și programarea calculatoarelor 2: Laborator 1

UNIX și Linux

Laboratoarele la aceasta disciplina se desfășoara pe calculatoare rulând sistemul de operare Linux, aceasta cu mai multe obiective: Linux este o versiune a sistemului de operare UNIX dezvoltat inițial în anii '70 la Bell Labs concomitent cu limbajul C, folosit pentru cea mai mare parte a implementării. Sistemul de operare Linux e un efort comun al multor programatori, dezvoltat sub licența GNU, conform căreia codul său sursă este distribuit și disponibil public în mod gratuit.

Comenzi Unix

UNIX are un sistem de fișiere arborescent. Spre deosebire de sistemul de fișiere DOS/Windows, separatorul între componentele numelui de fișier (cataloage și numele propriu-zis) este caracterul / (slash) și nu \ (backslash). De asemenea, numele de fișiere nu conțin un identificator al discului fizic (A:, C:, etc.), ci întreaga ierarhie de fișiere pornește de la o rădăcină unică, notată / În continuare, numele comenzilor sunt scrise cu caractere tip mașină de scris, argumentele lor sunt scrise cursiv, iar textul între [ ] denotă un argument opțional. Câteva comenzi de bază sunt: Execuția unui program din linia de comandă poate fi abandonată forțat tastând Control-C. Pentru programele care citesc de la intrarea standard, sfârșitul de fișier se indică cu Control-D. Atenție, tastarea Control-Z provoacă oprirea temporară a programului și trecerea lui în fundal, controlul revenind în linia de comandă. Pentru o navigare și manipulare mai facilă a fișierelor se poate folosi și programul Midnight Commander (mc), similar lui Norton Commander din mediul DOS/Windows.

Compilatorul gcc

Compilatorul gcc (GNU Compiler Collection) este unul din cele mai performante compilatoare pentru limbajul C, și e realizat în același model de distribuție gratuită a sursei ca și celelalte componente ale sistemului GNU/Linux.
Fișierele sursă au în mod convențional extensia .c. Obișnuit, pentru a compila programul nume.c, se execută comanda
gcc -o nume nume.c
Argumentul nume al opțiunii -o indică numele dat executabilului (de obicei, același nume de bază ca și pentru sursă). Fără opțiunea -o, executabilul e denumit implicit a.out. [În UNIX, fișierele executabile nu sunt identificate prin extensie (cum ar fi .exe), ci printr-un atribut (permisiune de execuție) care în acest caz e setat automat de compilator].
Pentru a compila programe cu funcții matematice standard e nevoie de biblioteca libm. În acest caz, se folosește opțiunea -l urmată, fără spațiu, de numele bibliotecii (fără prefixul lib folosit convențional pentru toate bibliotecile). De exemplu:
gcc -lm -o prog prog.c
Alte opțiuni pentru gcc vor fi discutate ulterior.

Editorul Emacs

Emacs este un editor puternic și flexibil care folosește în același timp și ca mediu integrat de dezvoltare de programe și oferă multe alte facilități (e-mail, browser web, etc). Emacs poate fi ușor adaptat preferințelor fiecărui utilizator și interfațat cu alte programe scriind funcții (extensii) în LISP. Frecvent folosită este versiunea xemacs, realizată special pentru mediul X Windows. Emacs este un program complex, de dimensiuni mari. Pentru nevoile uzuale de programare se pot folosi cu succes editoare similare mai simple, cum ar fi jed sau xjed. Când porniți editorul Emacs, folosiți comanda emacs & indicând interpretorului de comenzi prin caracterul & ca programul să fie lansat în fundal (util pentru programe care rulează în ferestre separate), iar terminalul să rămână disponibil pentru noi comenzi.

Comenzi Emacs

Emacs are o mare varietate de comenzi care pot fi adaptate preferințelor utilizatorului. Pentru o introducere (î n limba română) a celor mai utilizate, apelați din meniu Help -> Tutorials -> Romanian. Câteva din comenzile cele mai simple sunt indicate mai jos. Prefixul C- indică apăsarea tastei Control, iar prefixul M- indică apăsarea tastei Alt sau Escape.

Comenzi de poziționare a cursorului

C-a (sau Home): începutul liniei
C-e (sau End): sfârșitul liniei
C-b (sau săgeată stânga): caracter înapoi (back)
C-f (sau săgeată dreapta): caracter înainte (foward)
M-b: cuvânt înapoi
M-f: cuvânt înainte
C-n: rând în jos (next)
C-p: rând în sus (previous)
C-v: pagină în jos
M-v: pagină în sus
C-l: centrează ecranul în dreptul cursorului

Comenzi de editare

C-d (sau Delete): șterge caracter înainte (sub cursor)
M-Backspace: șterge cuvânt înapoi
M-d: șterge cuvânt înainte
C-spațiu: marchează un capăt al unei regiuni (bloc);
M-w: copiază conținutul regiunii, între punctul marcat și cursor (copy)
C-w: șterge conținutul regiunii, între punctul marcat și cursor (cut)
C-y: inserează zona tampon, adică conținutul ultimei operații de copiere/ștergere (paste)
C-k: șterge până la sfârșit de linie. Pentru a șterge o linie: mergeți la începutul ei (C-a) și tastați C-k de două ori.
C-_: anulează ultima comandă de editare (undo)

Majoritatea comenzilor Emacs la nivel de caracter, cuvânt și linie au fost încorporate în interpretoarele de comenzi UNIX, fiind utile pentru editarea facilă și rapidă a liniei de comandă.

Comenzi de lucru cu fișiere

Comenzile de mai jos sunt compuse din două secvențe de taste, având prefixul C-x.
C-x C-f: încarcă un fișier într-o nouă fereastră
C-x C-s: salvează fișierul din fereastra curentă (save)
Ca și majoritatea editoarelor moderne, Emacs salvează pentru siguranță din proprie inițativă conținutul fișierului din când în când (autosave). Totuși, e bine să salvăm noi înșine fișierul curent după câteva minute de editare pentru a ne proteja de erori nedorite. Emacs păstrează un număr de versiuni anterioare din fiecare fișier (numite fișier.~1~, fișier.~2~, etc. Versiunea salvată automat se numește #fișier#, iar comanda M-x recover-file va înlocui fișierul curent cu conținutul salvat automat.
C-x C-w: salvează fereastra curentă în alt fișier (save as)
C-x C-c: iese din Emacs
C-g: anulează o comandă neterminată

Interfața cu gcc

Emacs oferă un mod specializat pentru compilarea programelor, permițând astfel editarea, compilarea și corectarea erorilor din același mediu. Pentru aceasta se apelează în editor comanda M-x compile (meniul Tools->Compile). În mediul instalat în laborator, pentru fișier.c, comanda sugerată de compilare (care se poate eventual edita și apoi confima cu Enter) are forma
gcc -Wall -o fișier fișier.c
specificând compilatorului să genereze toate mesajele de avertisment (-Wall) și să dea executabilui numele fișier (opțiunea -o). E preferabil să se compileze din Emacs, pentru că editorul verifică dacă fișierul a fost modificat și solicită utilizatorului salvarea fișierului, evitând compilarea unei versiuni vechi. Rezultatele compilării sunt prezentate într-o fereastră separată. Prin poziționare pe un mesaj de eroare, și apăsarea tastei Enter, cursorul se mută în fereastra de cod la poziția corespunzătoare erorii.
Marius Minea
Last modified: Mon Mar 15 23:06:09 EET 2004