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:
- dobândirea de experiență pe o platformă alternativă celei DOS/Windows
- utilizarea unui mediu frecvent folosit în dezvoltarea de programe
(compilatorul gcc, editorul Emacs)
- familiarizarea cu modul de a rezolva o problema prin conectarea unor
utilitare simple și generale, concept caracteristic sistemului UNIX
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:
- cat fișier
Afișează conținutul fișierului (complet, fără a se opri la un ecran).
Pentru a vizualiza fișierul ecran cu ecran, folosiți comanda
less fișier (ieșiți cu tasta q).
- cd [nume_catalog]
Schimbă catalogul curent, trecând în cel specificat (implicit: în
catalogul personal (home directory) al utilizatorului).
La fel ca și sub DOS/Windows, . denotă catalogul curent, iar
.. catalogul părinte. Notația ~ se referă la catalogul
personal al utilizatorului curent.
- cp [opțiuni] fișier1 fișier2
Face o copie a lui fișier1, cu numele fișier2
cp [opțiuni] fișier1 fișier2 fișier_n dir
Copiază fișierele indicate în catalogul dir.
Opțiuni: -i (interactiv): întreabă înainte de a suprascrie;
-r (recursiv): copiază toate fișierele și
subcataloagele din catalogul sursă indicat.
- ls [nume_catalog]
Listează (afisează numele pentru) fișierele din catalogul dat (implicit:
catalogul curent).
- mkdir nume_catalog
Creează un catalog (directory) cu numele dat.
- mv [opțiuni] fișier1 fișier2
Redenumește fișier1, cu numele fișier2
mv [opțiuni] fișier1 fișier2 fișier_n dir
Mută fișierele indicate în catalogul dir.
Opțiuni: -i (interactiv): întreabă înainte de a suprascrie.
Un catalog e mutat implicit împreună cu întreg conținutul, deci opțiunea
-r nu mai apare, spre deosebire de copiere.
- rm [opțiuni] nume_fisier
Șterge fișierul specificat.
Opțiunea -i (interactiv) solicită confirmare, -f forțează
(fără confirmare) iar -r șterge recursiv tot conținutul catalogului
indicat.
- rmdir nume_catalog
Șterge catalogul indicat (acesta trebuie să fie gol).
- man nume_comandă
Afișează pagina de manual pentru comanda indicată (cu toate opțiunile).
Există pagini de manual și pentru funcțiile standard C. În caz de
ambiguitate datorată altor comenzi cu același nume (ex. exit, printf),
puteți specifica cu man 3 funcție căutarea doar în
secțiunea a treia, corespunzătoare funcțiilor.
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