Documente Academic
Documente Profesional
Documente Cultură
Linux este un sistem de operare cu divizare a timpului (time-sharing operating system) care prezintă
următoarele atribute de baza:
- are un sistem ierarhizat de fişiere;
- asigură compatibilitatea între fişiere, dispozitive I/O şi mecanismele de comunicaţie între procese;
- oferă posibilitatea de a iniţia procese asincrone, multitasking;
- permite selectarea de către utilizator a interpretorului de comenzi;
- prezintă un grad înalt de portabilitate, fiind scris în proporţie de 90% in C.
Nucleul are rolul de a gestiona resursele fizice (procesor, memorie, dispozitive periferice) şi logice
(procese, fişiere, etc). Interfaţa dintre nucleu şi aplicaţiile utilizator este asigurată de proceduri şi
funcţii puse la dispoziţie direct de nucleu sau de o serie de biblioteci.
Interfaţa între utilizator şi sistemul de operare este formată din comenzi, care sunt de fapt programe
ce se lansează în execuţie cu ajutorul interpretorului de comenzi. În momentul intrării unui
utilizator într-un sistem Linux, sistemul stabileşte, pe baza unor informaţii înregistrate despre
utilizator, interpretorul de comenzi ce va fi folosit şi lansează în execuţie acel interpretor. Există
mai multe variante de interpretoare de comenzi (csh – C-shell; ksh – Korn shell; bash – Bourne
again shell, etc.), deosebirile dintre acestea fiind legate de facilităţile de programare pe care le oferă
utilizatorului, de o serie de elemente interactive şi de modul de prezentare a rezultatelor unei
comenzi. Modul de funcţionare a unui interpretor de comenzi este ilustrat în fig. 1.1. Utilizatorul
introduce o comandă (de obicei cu ajutorul unei tastaturi) terminată cu CR (Enter). Comanda este
analizată şi dacă nu este detectată nici o eroare, programul corespunzător este citit de pe disc,
încărcat în memorie şi executat. Dacă se detectează vreo eroare în sintaxă, se afişează un mesaj
corespunzător. După terminarea programului, interpretorul preia controlul şi aşteaptă următoarea
comandă.
În continuare vor fi prezentate, pe scurt, câteva comenzi Linux uzuale. Pentru mai multe detalii
despre aceste comenzi se recomandă vizualizarea paginilor de help cu ajutorul comenzii
man nume_comanda.
analizează sintactic
comanda
da afişează mesaj de
eroare?
eroare
nu
da comandă nu
internă?
semnalizează sfârşitul
procesului fiu
b) Comenzi de informare
d) Alte comenzi
Dacă se doreşte ca, după lansarea în execuţie, vim să încarce un fişier, se va utiliza comanda
$ vim nume_fisier
Dacă fişierul cu numele specificat nu există se va crea un fişier vid cu acel nume.
Editorul vim are mai multe moduri de operare, printre care modul text, modul comandă şi modul
vizual. În modul text, tastele apăsate de utilizator sunt introduse într-un buffer (urmând a fi salvate
ulterior în fişierul deschis) şi afişate pe monitor. În modul comandă, orice secvenţă de taste este
interpretată drept comandă vim. Modul vizual este util pentru copierea unor blocuri de text.
Trecerea din modul text în cel comandă se face cu tasta i. Trecerea din modul comandă în cel
vizual se face cu tasta v. Revenirea în modul text se face cu tasta Esc.
Comenzile vim pot fi executate doar în modul comandă sau vizual. Comenzile precedate de : apar
în linia de stare a editorului (ultima linie) şi trebuie terminate cu CR pentru a se executa.
Comandă Descriere
:q determină părăsirea editorului doar dacă fişierul deschis nu
a fost modificat (dacă în modul text nu s-a inserat nici un
caracter)
:q! determină părăsirea forţată a editorului, pierzându-se
eventualele modificări
:wq salvează conţinutul bufferului (ce conţine toate
modificările) în fişierul deschis
:save nume_fisier salvează conţinutul bufferului în fişierul specificat; dacă
fişierul nu există, el va fi creat
:n sau nG mută cursorul pe linia n. Dacă n este invalid, comanda nu
are nici un efect
G mută cursorul pe ultima linie
w mută cursorul la începutul următorului cuvânt
b mută cursorul la începutul cuvântului curent sau anterior
x şterge caracterul de la poziţia curentă
dw şterge toate caracterele de la poziţia curentă până la primul
spaţiu (inclusiv spaţiul). În cazul în care cursorul este
poziţionat pe un spaţiu, acesta va fi şters, împreună cu toate
spaţiile care urmează
ndw şterge n cuvinte de la poziţia curentă
d$ şterge cuvintele de la poziţia curentă până la sfârşitul liniei
dd şterge linia curentă
ndd şterge următoarele n linii (inclusiv linia curentă)
dG şterge toate liniile până la sfârşitul fişierului (inclusiv linia
curentă)
u renunţă la modificarea anterioară (undo)
p inserează la poziţia curentă ceea ce s-a copiat sau şters
ultima oară
/sir_caract caută şirul de caractere în fişierul deschis
Introducere în sistemul de operare Linux 5
n repetă căutarea anterioară
:s/old/new/g modifică apariţiile şirului old cu şirul new în linia curentă
:%s/old/new/g modifică toate apariţiile şirului old cu şirul new
:!comanda_LINUX execută comanda LINUX
:help oferă acces la paginile de help ale editorului
Tab. 1.1. Comenzi vim
Limbajul C oferă suportul cel mai adecvat dezvoltării aplicaţiilor sub Linux, datorită modului
convenabil în care se face accesul la serviciile sistemului de operare. Aceste funcţii permit o
multitudine de operaţii referitoare la lucrul cu fişiere, alocare a memoriei, controlul proceselor, etc.
Fiind scrise in C, funcţiile sistemului de operare au un mecanism de apelare comod, similar oricărei
rutine scrisa de utilizator. Caracteristicile principale ale limbajului ca si majoritatea funcţiilor
disponibile în implementările de sub MS-DOS sunt valabile si sub Linux. În plus, sunt disponibile
si alte facilităţi care vor fi detaliate ulterior.
Dezvoltarea unei aplicaţii C presupune editarea textului sursa cu ajutorul unui editor (vim sau
editorul intern al programului mc). Fişierul creat trebuie să aibă extensia .c, extensie care prin
convenţie este atribuită surselor scrise in limbaj C.
Exemplul de mai jos prezintă textul sursă pentru un program care copie un şir sursă într-un şir
destinaţie.
#include <stdio.h>
int main(void) {
char sursa[] = "abcdefg";
char dest[10];
int i = 0;
dest[i] = '\0';
Obs.:
1. Această formă invocă compilatorul specificând prin opţiunea -o exemplu numele fişierului
executabil care va fi creat. În lipsa opţiunii de mai sus, fişierul executabil creat va fi denumit a.
2. Faza de link-editare este realizată în mod automat. Pentru a obţine numai forma obiect se
foloseşte opţiunea -c.
3. Fişierele antet standard folosite în compilare, precum şi bibliotecile utilizate pentru link-editare
sunt amplasate în directoare standard, /usr/include şi /usr/lib.
În cazul existenţei unor erori de compilare sunt semnalate linia şi tipul erorii întâlnite. Depistarea
efectivă a erorii revine programatorului.
Probleme
1. Editaţi un fişier sursă C care să conţină programul prezentat în tab. 1.2. În cazul în care utilizaţi
editorul vim, încercaţi cât mai multe comenzi din cele descrise în tab. 1.1.
2. Compilaţi sursa C şi rulaţi programul. Pentru rulare utilizaţi comanda
$ ./nume_program
3. Modificaţi programul pentru a permite introducerea de la tastatură a şirului sursă. Pentru citirea
de la tastatură a şirului se poate utiliza funcţia C scanf sau gets., cu următoarele prototipuri:
#include <stdio.h>
char *gets(char *buf)
int scanf(char const format, ...) – pentru citirea unui şir de caractere se va
utiliza ”%s” pentru parametrul format.
4. Scrieţi un program ce afişează numărul de apariţii ale unui tipar într-un şir de caractere. Ambele
şiruri (tiparul şi şirul în care se efectuează căutarea) vor fi preluate de la tastatură.