Documente Academic
Documente Profesional
Documente Cultură
In acest laborator se vor urmari principalele proprietati ale unui sistem de operare urmarind cazul concret
al sistemului de operare DOS.
Interfata SO SO ofera utilizatorului o serie de servicii prin care sa comunice reciproc. Aceste dialoguri
sunt materializate de cele mai multe ori prin programe scrise intr-un limbaj de programare, fie de nivel
inalt, fie in limbaj de asamblare. Se vor urmari in continuare modurile in care un utilizator poate
interactiona direct cu SO direct, fara a mai folosi un limbaj de programare.
Limbaje de control
Utilizatorul comunica cu SO printr-un set de comenzi oferite de catre SO. Acest nivel de interfata poate fi
privit ca un program permanent activ, numit interpretor de comenzi.
Pentru a oferi modalitati convenabile de comunicare, comenzile sunt de cele mai multe ori ierarhizate si
destinate diferitelor clase de utilizatori. De regula, intr-un sistem conversational multiutilizator comenzile
sunt grupate si se refera la una din urmatoarele cinci sarcini:
1. inceperea si terminarea unei sesiuni de lucru;
o numele utilizatorului, care trebuie cunoscut in prealabil de catre sistem;
o un cod de identificare unica: cont, parola, prioritate;
o resursele maximale pe care utilizatorul le doreste: timp maxim CPU, cantitatea de memorie, periferice, etc.
2. executia unui program sau proces;
o editare;
o compilare;
o editare de legaturi;
o executie propriu-zisa;
o depanare(executie asistata).
3. obtinerea de informatii despre sistem;
o informatii globale de stare
data si ora curenta;
numarul, eventual numele utilizatorilor activi in sistem la un moment dat;
gradul de incarcare al sistemului;
utilizarea memoriei si a perifericelor;
modul curent de configurare al SO;
disponibilitatea unor resurse;
descrierea anumitor periferice.
o informatii de stare individuala
timpul CPU consumat pentru procesul curent;
timpul fizic consumat de la conectare (login);
numarul operatiilor I/O efectuate;
fisierele deschise la momentul curent;
procesele proprii active la momentul curent;
perifericele alocate la procesele lui etc.
4. manipularea de fisiere;
o creare;
o stergere;
o copiere;
o concatenare;
o tiparire(afisare);
o renumire(redenumire,mutare).
5. administrare si intretinere sistem
o nivelul administrator (supervizor, sistem);
o nivelul operator;
o nivelul utilizator obisnuit.
Principalele comenzi DOS
Comanda Descriere
recunoscuta si ca CHDIR, provine de la Change Directory, schimba directorul curent in cel
specificat. Exemple:
CD cd c:\lucru
cd ..
cd \
recunoscuta si ca MKDIR, provine de la Make Directory, creaza un director nou. Crearea se
face numai daca nu exista deja un director cu numele specificat. Exemple:
MD
md c:\lucru\test
mkdir director1
recunoscuta si ca RMDIR, provine de la Remove Directory, sterge un director nou. Stergerea se
face numai daca directorul indicat este vid, adica nu contine nici un fisier sau subdirector
RD subordonat. Exemple:
rd c:\lucru\test
rmdir director1
afiseaza structura arborescenta de directoare a directorului curent sau a directorului specificat.
Exemple:
TREE
tree
tree c:\lucru
Teme de laborator:
Sa se creeze urmatoarele structuri arborescente de directoare:
a) b)
c) d)
Comenzi de lucru cu discuri si fisiere
Comanda Descriere
Realizeaza partajarea unui harddisk in mai multe partitii. In mod normal aceasta comanda se
executa foarte rar, iar persoana care o lanseaza trebuie sa fie competenta. Este foarte usor sa se
fdisk
piarda toate informatiile de pe hardisk la o folosire incorecta. Se recomanda consultarea
prealabila si serioasa a documentatiilor pentru cei ce vor (sau sunt nevoiti) sa o aplice.
Initializeaza discul specificat prin [c:\] la un format standar acceptat de catre DOS. Dupa ce se
scrie pe intreg discul, creaza si initializeaza directorul radacina precum si tabela FAT. Incepand
cu DOS 4.0 fiecarui disk i se atribuie la formatare un numar de serie, diferit de la o formatare la
alta. Optiuni:
format /s cere ca discul respectiv sa fie facut disc sistem;
/v indica faptul ca utilizatorul doreste introducerea unei etichete de volum pentru
identificare;
Listeaza toate intrarile din fisierul director sau numai cele specificate. INformatia afisata include
numele volumului si dimensiunea spatiului liber de pe disc. INtrarile care afiseaza alte
directoare sunt identificabile clar prin prezenta lui DIR in campul de dimensiune fisier. Optiuni:
dir /p afiseaza pagina cu pagina informatiile dorite;
/w afiseaza condensat directorul, impartind ecranul in cinci coloane, care contin doar
numele fisierelor.
Copiaza unul sau mai multe fisiere de pe alt disc si optional, da copiei un nume diferit daca in
comanda se specifica acesasta. Optiuni:
/A determina tratarea fisierul ca un fisier ASCII (text); utilizat pentru fisierul sursa
copy determina copierea pana la eof, iar pentru fiserul destinatie copiaza inclusiv eof.
Teme de laborator:
1. Sa se scrie o comanda care copiaza toate fisierele cu extensia *.java dintr-un director in altul.
2. Sa se scrie o comanda ce ne raporteaza intr-un fisier ce fisiere cu numele lab?.html sunt in
memoria calculatorului.
3. Sa se schimbe data unui fisier cu data curenta a calculatorului.
Filtre DOS
Filtre DOS
Comanda Descriere
Aceasta comanda "filtru" citeste date de la echipamentul standard de intrare, sorteaza datele,
apoi scrie datele sortate la echipamentul standard de iesire. Sortarea este efectuata in ordinea
codurilor ASCII, crescator, la nivel de linie de text. Caracterele TAB nu sunt expandate in
spatii. Optiuni:
sort
/r determina efectuarea sortarii in ordine descrescatoare;
/+n este un intreg care determina inceperea sortarii din coloana n. Daca nu se specifica
nici un parametru, sortare incepe din coloana 1.
Aceasta comanda "filtru" trimite la echipamentul standard de iesire toate liniile din fisierul
specificat in linia de comanda, care contin un sir de caractere specificat. Optiuni:
/v determina afisarea tuturor liniilor care nu contin sirul specificat;
/c determina afisarea numai a unui contor cu numarul de apariti a sirului specificat in
fiecare fisier, fara a mai afisa liniile care contin sirul specificat
/n determina o numerotare relativa a liniilor care contin sirul specificat, numarul de linii
se afiseaza inaintea fiecarei linii scrise.
Sirul trebuie introdus intre ghilimele (""). Doua apostrofuri consecutive sunt tratate ca si un
find
singur apostrof. Comparatia tine cont de litere mari si litere mici. Nu se permite specificarea
generica a fisierelor. Exemple:
...>find "poezie" carte1.txt carte2.txt carte3.txt
Va afisa toate liniile din fisierele carte1.txt, carte2.txt, carte3.txt care contin sirul
"poezie"
Teme de laborator:
Comanda Descriere
Fixeaza caile de cautare suplimentare a fisierelor executabile. In mod implicit daca fisierele de
path comenzi si comenzile externe nu sunt precedate de o specificatie de cale ele sunt cautate numai
in directorul curent.
Comanda este similara comenzii path, doar ca ea se refera la caile suplimentare de cautare a
append
fisierelor care nu sunt fisiere executabile.
Optimizeaza accesul la fisierele si directoarele mai des folosite. In acest scop este gestionata o
fastopen zona de memorie tampon cu adresele de disc recent folosite.. Principiul este cel al memoriei
cache.
date Afiseaza si schimba data curenta a sistemului.
time Afiseaza si schimba ora exacta curenta a sistemului.
break Sesizeaza sau nu apasarea lui Ctrl+Break.
Se paote defini modul in care se doreste afisarea prompterului de catre command."Text" este un
sir de perechi de caractere fara spatiu intre perechi. Primul caracter din pereche este simbolul '$'
(dollar), iar al doilea poate fi una din literele t, d, p, g, n.
-t cere afisarea la prompter a orei exacte;
prompt
-d cere afisarea la prompter a datei;
text
-p cere afisarea caii de la directorul radacina pana la directorul curent;
-g cere afisarea la prompter a simbolului '>';
Comenzi de de informare
Comanda Descriere
mem Afiseaza continutul memorie la un moment dat.
ver Afiseaza pe ecran numarul versiunii DOS a sistemului incarcat.
vol Afiseaza eticheta de volum a volumului curent sau a celui specificat.
help Da detalii despre comenzile DOS in general sau despre o anumita comanda specificata.
Teme de laborator:
Un fisier de comenzi este un fisier text care contine una sau mai multa comenzi si/sau directive care se
executa succesiv, fara interventia directa a utilizatorului. Numele unui astfel de fisier, in cazul SO DOS
trebuie urmat de tipul fisierului *.bat. Un prim exemplu de fisier de comenzi DOs este fisierul
autoexec.bat, daspre care vom discuta intr-un laborator urmator. Daca acest fisier este prezent in
directorul radacina de pe partitia de bootare a sistemului de operare, DOS executa automat comenzile din
el la fiecare incarcare a sistemului. Un fisier de comenzi DOS contine in el mai multe tipuri de
constructii:
comenzi DOS propriu-zise;
etichete;
caractere speciale: | < > si %
parametrii formali, care vor fi inlocuiti la lansare cu parametrii actuali;
variabile globale rezidente in interpretorul de comenzi;
variabile locale folosite la cicli;
directive adresate interprtorului fisierelor de comenzi.
Exemplu: Fisier care listeaza programele Java din directorul curent, le copiaza pe discheta si apoi le
sterge
tipar.bat dir *.java
copy *.java a:\
del *.java
O eticheta se scrie sub forma: :nume, caracterul ":" fiind urmat de maximum 8 litere sau cifre. O eticheta
apare (ca definitie) pe o singura linie, la inceput de rand.
Caracterele speciale | < > sunt interpretate in comenzi ca si legare in pipe a doau comenzi, respectiv
pentru redirectarea intrarii si/sau a iesirii standard a unei comenzi. Pentru a fi interpretate ca si caractere
obisnuite ele trebuiesc scrise intre ghilimele. Spre exemplu, o linie de forma; A | B este interpretata ca o
succesiune a comenzilor A si B, legate in pipe. In schimb o linie de forma: A "|" B este interpretata ca o
singura comanda A, care are doi parametrii, o bara verticala | si caracterul B.
Caracterul @ plasat ca prim caracter intr-o linie are ca efect neafisarea linie pe ecran. Linie este in sa
prelucrata de catre interpretorul fisierelor de comenzi.
Caracterul % marcheaza parametrii formali, variabilele globale si variabilele locale.
In fisierul de comenzi pot aparea pana la 10 parametri formali, notati cu %0 %1 ... %9. Corespunzator
acestora in linia de comanda, care lanseaza in executie fisierul de comenzi argumentele sunt puse in
corespondenta cu acesti parametri.
Exemplu: fisier de comenzi ce primeste ca parametrii numele a trei clase Java, pe care le compileaza si
apoi lanseaza in executie pe prima dintre ele:
executa.bat call javac %1.java
call javac %2.java
call javac %3.java
call java %1
Daca se lanseaza fisierul prin comanda:executa SortTest QSort MyRead atunci parametrii formali vor
avea valorile:
%0 executa
%1 SortTest
%2 QSort
%3 MyRead
Variabilele globale sunt cele care au primt valori prin comanda SET. Pentru a avea acces la ele numele lor
trebuie cuprinse intre doua caractere %. Prin intermediul acestor variabile se poate dirija anticipat
actiunea unui fisier de comenzi, sau doua fisiere de comenzi pot comunica intre ele. Spre exemplu,
presupunem ca s-a dat o comanda: SET DEST=c:\lucru atunci intr-un fisier de comenzi ce se lanseaza
ulterior poate sa apara comanda: copy *.java %DEST%.
Directiva for permite prelucrarea iterativa a unei comenzi dintr-un fisier de comenzi. %%variabila este o
variabila locala de ciclare. Ea este secvential inlocuita cu toate valorile din multime si apoi evaluata si
executata. Daca un membru al multimii este o expresie construita generic (cu * si/sau ?), atunci %
%variabila va fi inlocuita pe rand cu toate numele de fisier care se potrivesc cu aceasta expresie.
Comanda for %%f in (*.java *.txt) do type %%f va tipari pe ecran mai intai toate fisierele de tip *.java
si apoi cele de tip *.txt. Daca in locul ei se da comanda: for %%f in (*.java *.txt) do dir %%f va lansa
cate un dir pemtru fiecare fisier in parte, nu numai doua comenzi dir cum ar parea la prima vedere.
Directiva for functioneaza si in linia de comanda, doar ca in linia de comanda nu mai este necesara
dublarea caracterului special %.
Directiva call permite apelul (lansarea in executie) a unui fisier de comenzi din altul. La terminarea
fisierului apelat controlul revine fisierului care l-a apelat. Tot aici se poate spune ca este posibil ca ultima
linie a unui fisier de comenzi poate fi lansarea in executie a unui alt fisier de comenzi, fara directiva call.
In acest caz se realizeaza o inlantuire a celor doua fisiere.
Directiva goto transfera controlul in fisierul de comenzi in linia de comanda situata dupa eticheta
specificata.
Directiva if permite executia conditionata a unei comenzi DOS din fisierul de comenzi, sau a unei alte
directive.
Ce inseamna conditia ERRORLEVEL numar? Fiecare comanda DOs transmite la terminarea ei un cod
cu o valoare intre 0 si 255. De obicei un cod cu o valoare nenula indica o situatie neobisnuita. Conditia
ERRORLEVEL numar este adevarata daca codul de retur al ultimei comenzi este mai mare sau egal cu
numarul scris dupa cuvantul ERRORLEVEL.
Directiva shift permite folosirea a mai mult de zece parametrii formali. Efectul ei este acela de a decala
parametrii formali, facand sa se piarda parametrul %0, parametrul care era %1 sa devina %0, parametrul
care era %2 sa devina %1,etc.
Directiva echo
CTRL+C
CTRL+BREAK
Teme de laborator:
1. Sa se scrie un fisier de comenzi care realizeaza stergerea a oricate fisiere indicate ca parametrii.
Rezolvare:
:repeta
shift
if "%0"=="" goto :sfarsit
del %0
goto :repeta
:sfarsit
2. Sa se scrie un fisier de comenzi care verifica daca un director al carui nume este primit in primul
parametru exista si daca acesta exista sa se afiseze continutul toate fisierele care au extensia din
parametrul al doilea
3. Sa se scrie un fisier de comenzi prin care sa se caute in oricate fisiere date ca parametru un cuvant
primit tot ca si parametru. Sa se salveze rezultatul intr-un fisier text.
4. Sa se scrie un fisier de comenzi prin care sa se creeze un director cu numele avand primul
parametru si apoi sa se copieze in el fisierul/directorul din parametrul al doilea
5. Sa se creeze un director in care sa se copieze toate fisierele de un anumit fel din alt director (cu
ajuotrul unui fisier de comenzi).
DOS - Laborator 6
Programe utilitare
COMMAND
BDOS
DISK BIOS
ROM BIOS
Componenta ROM-BIOS
Componenta DISK-BIOS
In ceea ce priveste lucrul cu discul, BIOS opereaza cu cilindri, piste, sectoare, etc.
Extinde functiile BIOS la un nivel mai inalt, cu precadere cele privitoare la lucrul
cu discurile. Aceasta componenta este materializata intr-un fisier pe disc care
poarta unul dintre numele:
IBMDOS.COM, DOS.COM, MSDOS.SYS
rezident pe discul sau discheta de pe care se incarca sistemul de operare.
Componenta COMMAND
Pentru a putea sa asigure toate serviciile pentru care a fost conceput, SO - in fapt,
tot un program - trebuie sa se afle in memorie. Ori, la pornirea calculatorului, in
memoria sa nu se afla nimic (coerent). Nici macar un program care sa stie sa
incarce sistemul de operare.
Rezolvarea acestui impas a constituit o revolutie in dezvoltarea calculatoarelor.
Situatia imposibila in care se afla calculatorul a fost asemuita cu efortul cuiva de a
incerca sa se ridice din groapa in care a cazut folosindu-se de sireturile
bocancilor. Procedeul de incarcare a sistemului de operare a fost numit bootstrap
(boot - bocanc, strap - siret). Ideea principala a cestui procedeu a fost de a folosi
memoria de tip ROM (nevolatila) pentru a realiza incarcarea Pentru aceasta in
cadrul ROM-BIOS exista un scurt program numit loader (incarcator).
Primul fisier de sistem incarcat in memorie este IO.SYS (care contine componenta
BIOS). Urmeaza fisierul MSDOS.SYS (care contine componenta BDOS), dupa care
este cauta fisierul de configurare CONFIG.SYS. Toate aceste fisiere trebuie sa
existe in directorul radacina. Daca nu este gasit fisierul CONFIG.SYS, sistemul
este configurat cu valori implicite. Daca fisierul este gasit, sistemul este
configurat conform comenzilor din acest fisier (o linie de fisier - o comanda).
In continuare este incarcat interpretorul de comenzi COMMAND.COM. Dupa ce a
preluat controlul, aceasta cauta (tot in directorul radacina) fisierul numit
autoexec.bat, care contine comenzile ce dorim sa fie executate de fiecare data
cand se incarca sistemul (o linie in fisier - o comanda). Daca nu este gasit fisierul
autoexec.bat, COMMAND>COMexecuta comenzile DATE si TIME.
Dupa executarea fisierului autoexec.bat sau a comenzilor date si time, este afisat
prompterul sistemului de operare si in continuare se pot introduce comenzi
(controlul este da utilizatorului).
Observatie: Orice disc sistem MSDOS contine obligatoriu in directorul radacina urmatoarele fisiere
(ordinea este arbitrara): IO.SYS, MSDOS.SYS, COMMAND.COM si optional fisiereleconfig.sys si
autoexec.bat, care sunt fisiere text.
config.sys
Comenzile din acest fisier se refera la:
1. modul de lucru pentru sistemul de operare;
2. incarcarea de drivere pentru exploatarea eficienta a calculatorului.
REM [comentariu]
O linie din config.sys care incepe cu literele REM este considerata comentariu. EA
va fi neglijata si se va trece la executarea urmatoarei linii. Se foloseste uzual
pentru a dezactiva temporar anumite comenzi.
DOS=HIGH; DOS=UMB sau DOS=HIGH,UMB
Specifica faptul ca MSDOS trebuie sa foloseasca memoria superioara, sa incarce
o parte din el in memoria inalta, sau ambele.
Parametrul HIGH specifica faptul MSDOS trebuie sa incarce o parte din memoria
inalta, eliberand astfel memorie conventionala. Are efect doar daca a fost incarcat
in prealabil driverul himem.sys.
Parametrul UMB specifica faptul MSDOS isi poate incarca driverele in memoria
superioara folosind comanda DEVICEHIGH, eliberand astfel memorie
conventionala. Are efect doar daca a fost incarcate driverele himem.sys si
emm386.exe.
Cea de-a doua clasa de comenzi din config.sys se refera la incarcarea driverelor. Un
driver este o rutina care stie sa comunice cu un dispozitiv (periferic sau memoria
interna).
Driverele dispozitivelor standard (tastatura, ecran) fac parte din sistemul de
operare. Cand este conectat la calculator un nou periferic, trebuie instalat si
driverul corespunzator. Driverele sunt instalate prin comenzi DEVICE date in
fisierul config.sys si pot fi livrate cu sistemul MSDOS sau separat. De regula au
extensia sys si se incarca odata cu celelalte programe de control MSDOS,
ramanand rezidente in memorie.
Un driver poate avea unul din urmatoarele roluri:
extinderea configurarii cu noi dispozitive fizice (ex: mouse.sys);
gestionarea memoriei extinse (himem.sys);
adaugarea de facilitati pentru periferice existente (ansi.sys permite
adaugarea de noi functii pentru controlul tastaturii si a ecranului).
DEVICE=fisier [parametri]
Incarca driverul din fisierul specificat si ii transmite parametrii din linia de
comanda, parametri dependenti de driver.
DEVICEHIGH Are acelasi rol ca si comanda DEVICE, numai ca incearca sa incarce
driverul in memoria superioara daca exista. Daca nu exista memorie superioara,
driverul este incarcat in memoria conventonala, fara a se anunta acest lucru.
Cele mai importante drivere sunt:
ansi.sys permite controlul extins al tastaturii si ecranului;
ramdrive.sys permite crearea de discuri logice in memoria interna (discuri
RAM);
himem.sys driver pentru memoria extinsa;
emm386.sys driver pentru memoria superioara si expandata;
mouse.sys pentru lucrul cu mouse-ul.
autoexec.bat
Este un fisier de comenzi care se executa automat la bootare.
Exemplu
cls
@echo off
set path=c:\lucru;s:\jdk1.3\bin;
prompt $p$g
doskey
Teme de laborator:
1. Sa se scrie corecteze si descrie pe scurt fisierele de comenzi urmatoare .
1
echo off
if %1.==. goto err
if %1.==c. goto cre
if %1.==d. goto ste
if %1.==p. goto cop
echo primul parametru e gresit
goto sf
:cre
if %2.==. goto err1
md %2
goto sf
:ste
if %2.==. goto err2
rd %2
goto sf
:cop
if %2.==. goto err3
if %3.==. goto err4
copy %2 %3
goto sf
:err1
echo dati numele directorului care se creaza
goto sf
:err2
echo dati numele directorului care se sterge
goto sf
:err3
echo dati numele fisierului care se copiaza
goto sf
:err4
echo dati numele directorului in care se copiaza
goto sf
:err
echo dati parametri
:sf
2
echo off
if %1.==. goto err
:ghu
if %1.==. goto err
if %2.==. goto err
if %3.==. goto err
if %4.==. goto err
goto ghu
copy %2*.%1 %3
del %3\?%4*
goto sf
:err
echo dati 4 parametrii
:sf
3
echo off
if %1.==.goto err
dir %1 |find "file(s)"
goto sf
:err
dir |find "file(s)"
:sf
4
if %1 .==. goto err
:ghu
if %1.==. goto sf
if %2.==. goto err2
if %3.==. goto err3
type %1
type %2>prn
del %3
shift
shift
shift
goto ghu
:err2
type %1
goto sf
:err3
type %1
type %2>prn
goto sf
:err
echo dati parametri
:sf
5
if %1.===. goto err
dir %1|find "dir(s)"
goto sf
:err
echo dati parametri
:sf
6
if %1.==. goto err
dir %1 /a:-d|find "p"
goto sf
:err
dir /a:-d|find "p"
:sf
7
echo off
if %1.==. goto err
:hyu
if %1.==. goto err1
echo %1 >> dan
shift
goto hyu
:err1
type dan|sort
goto sf
:err
echo dati parametri
:sf
8
if %1.==. goto err
:sus
if not exist %1 goto err1
type %1 >>fis1
goto err2
:err1
echo >> %1
md %1
goto err2
:err2
shift
if %1.==. goto sf
goto sus
:err
echo dati parametri
:sf
9
echo off
if %1.==. goto err
dir %1 /a:-d|find /v ","
goto sf
:err
dir /a:-d|find /v ","
:sf
10
@echo on
if %1.==. goto err1
if %1==c goto creaza
if %1==d goto sterge
if %1==p goto copiaza
:creaza
if %2.==. goto err11
md %2
goto sf
:err11
echo Nu ati dat numele directorului care va fi creat.
pause
goto sf
:sterge
if %2.==. goto err12
rd %2
goto sf
:err12
echo Nu ati dat numele directorului care va fi sters.
pause
goto sf
:copiaza
if %2.==. goto err13
if %3.==. goto err14
copy %2 %3
goto sf
:err13
echo Nu ati specificat numele fisierului care va fi copiat.
pause
goto sf
:err14
echo Nu ati specificat numele directorului in care va fi copiat fisierul.
pause
goto sf
:err1
echo Nu ati specificat primul parametru !
pause
goto sf
:sf
CJ
http://www.cs.ubbcluj.ro/~rlupsa/edu/ac/doc/bat.html
Fisiere de comanzi
Pe scurt
Un fisier de comenzi este un program avand ca instructiuni elementare
comenzi DOS
Programul nu este structutat; instructiunile de control al executiei sunt goto,
if, for, call
Variabilele sunt de tip sir de caractere. Atribuieas se face cu instructiunea
set
Un fisier de comenzi poate primi parametrii la lansarea in executie. Acestia
se regasesc prin constructiile %1...%9 si cu instructiunea shift
Intrarea si iesirea standard se pot redirectiona prin constructiile >, >>, <, |
Teorie
Un fisier de comanzi este un fisier ce contine o inlantuire de comenzi DOS ce trebuie executate succesiv.
Fisierele de comenzi se creaza folosind un editor de text; recomandabil se va folosi mediul Turbo Pascal.
Un fisier de comenzi poate contine toate comenzile ce pot fi date in mod interactiv interpretorului de
comenzi.
Deoarece un fisier de comenzi este de fapt un program, avem in plus variabile, si instructiuni pentru
controlul ordinii executiei instructiunlor. Aceste instructiuni sunt: goto, if, for, shift, call. Pentru
informatii legate de aceste comenzi, va rugam sa cititi informatiile din Norton Guide sau din bibiografie.
Exista variabile, de tip sir de caractere, care pot fi modificate folosind comanda set. Acolo unde avem
nevoie de valoarea unei variabile, vom scrie %nume-variabila%.
Un fisier de comenzi poate fi apelat cu parametrii, de ex. il puem lansa prin comanda (interactiva)
t.bat 1 a.pas
in acest exemplu primul parametru este (sirul) 1, iar al doilea este a.pas. Din
interiorul fisierului de comenzi putem afla valorile parametrilor ca %1, ... , %9.
Comanda shift face ca %1 sa ia valoarea lui %2, %2 valoarea lui %3 s.a.m.d., %9
luand ca valoare urmatorul parametru (al zecelea).
Exercitii
1. Scrieti un fisier de comenzi care creaza un director cu numele pascal in care copiaza toate fisierele cu
extensia pas din directorul curent.
Rezolvare:
mkdir pascal
copy *.pas pascal
2. Acelasi lucru, dar dand cate o comanda copy pentru fiecare fisier
Rezolvare:
mkdir pascal
for %%i in (*.pas) do copy %%1 pascal
3. Scrieti un program care copiaza fisierele a.txt, aa.txt, ..., aaaaaaaa.txt in directorul c:\temp;
fisierul nu trebuie sa contina explicit cele 8 nume.
Rezolvare
Rezolvare
5. Scrieti un fisier de comenzi care primeste cel putin 2 parametrii. primul fiind un nume de director si
urmatoarele nume de fisiere, si muta fisierele date ca parametrii in directorul dat ca prim parametru. Se
vor semnala eventualele erori.
6. Scrieti un fisier de comenzi care concateneaza fisierele date ca parametrii in fisierul dat ca ultim
parametru. Se vor semnala eventualele erori.
7*. Scrieti un fisier de comenzi care primeste ca parametri nume de fisiere si copiaza acele fisiere ce au
extensia pas in directorul c:\temp.
8. Sa se afiseze lista fisierelor din directorul curent si, recursiv, din toate subdirectoarele sale.
Observatii
1. Numarul de parametrii cu care a fost apelat un fisier de comenzi se poate
determina afland care este primul parametru ce are ca valoare sirul vid.
2. Pentru a verifica daca un sir de caractere este numele unui director,
verificam daca exista fisierul nume\NUL. Aceasta se bazeaza pe faptul ca in
orice director gasim (prin testul de existenta) un fisier special cu numele NUL
3. Un fisier vid se poate crea prin comanda copy nul nume-fis
4. Un fisier de comenzi poate crea un alt fisier de comenzi, pe are in final sa-l
lanseze in executie!
http://www.cs.ubbcluj.ro/~dadi/ac/Lab
Fisiere BAT - laborator nr. I
1.Comenzi DOS mai des folosite:
-de lucru cu discul: diskcopy, sys, format, fdisk, chkdsk
-de lucru cu directoare: mkdir(md), chdir(cd), rmdir(rd), dir, path, subst
-de lucru cu fisiere: more, attrib, del, erase, deltree, fc, find, move, rename, sort, xcopy, copy, type, print
-eticheta de volum: label, vol
-alte comenzi: choice, edit, keyb, mode, cls, date, time, ver, echo,rem
2.Cerinte la laborator:Pentru fiecare problema se va scrie un fisier de comenzi DOS care va indeplini
urmatoarele cerinte:
-fisierul de comenzi va trebui sa verifice daca apelul este corect (numarul de parametri este
corespunzator) si fisierele
care trebuie tratate exista
-fisierul va rezolva problema respectiva:)
-la inceputul fisierului se va scrie in 5 randuri ca si comentarii textul problemei care se rezolva si modul
(algoritmul) de rezolvare a problemei
-pe alocuri (acolo unde este necesar) se vor insera comentarii in codul sursa (a nu se abuza, insa, de
aceste comentarii!!)
-la sfarsitul programului (sau in alt fisier), se va scrie o lista succinta cu cazurile de testare ale
programului impreuna cu output-ul lui
3.Exemplu de program:
REM Vom retine in variabila "d" primul parametru, adica directorul. Apoi facem un SHIFT pentru
REM a trece la urmatorul parametru. Apoi, intr-o structura repetitiva vom parcurgem restul
REM parametrilor si pentru fiecare testam existenta in directorul "d", iar in caz afirmativ
REM ii vom adauga continutul (cu TYPE) la sfarsitul fisierului toate.txt (prin redirectarea
REM iesirii standard)
@echo off
REM verificam numarul de parametrii
if "%2"=="" goto err1
REM verificam daca primul parametru e nume de director si il retinem in variabila "d"
if NOT EXIST %1\NUL goto err2
set d=%1
shift
REM parcurgem ceilalti parametrii din linia de comanda
:loop
if "%1"=="" goto end
REM verificam daca exista %d%\%1 si in caz afirmativ il concatenam la toate.txt
if EXIST %d%\%1 type %d%\%1 >>toate.txt
shift
goto loop
:err1
echo Trebuie minim doi parametrii!
goto end
:err2
echo Primul parametru trebuie sa fie nume de director
:end
REM afisam continutul fisierului toate.txt
type toate.txt
Probleme
1.Cerinte la laborator:Pentru fiecare problema se va scrie un fisier de comenzi DOS care va indeplini
urmatoarele cerinte:
-fisierul de comenzi va trebui sa verifice daca apelul este corect (numarul de parametri este
corespunzator) si fisierele
care trebuie tratate exista
-fisierul va rezolva problema respectiva:)
-daca este necesar, se va scrie si cate un program Pascal (C sau ASM) care va intoarce coduri
corespunzatoare,
ale caror valori sa fie testate in fisierul de comenzi.
-la inceputul fisierului se va scrie in 5 randuri (ca si comentarii) textul problemei care se rezolva si
modul (algoritmul) de rezolvare a problemei
-pe alocuri (acolo unde este necesar) se vor insera comentarii in codul sursa (a nu se abuza, insa, de
aceste comentarii!!)
-la sfarsitul programului (sau in alt fisier), se va scrie o lista succinta cu cazurile de testare ale
programului impreuna cu output-ul lui
2.Exemplu de program:
REM Sa se conceapa un fisier de comenzi COMPARA.BAT care primeste ca parametri doua nume de
fisiere. Daca ambele fisiere
REM exista, atunci acestea sa fie comparate (ca dimensiune), altfel sa se dea un mesaj corespunzator.
Programul va calcula dimensiunea
REM celor doua fisiere fara a folosi pentru aceasta comanda DOS comp.
REM Vom folosi comanda IF, varianta cu ERRORLEVEL. Astfel, scriem un fisier BAT care va apela un
program pascal (in format
REM executabil) care va compara dimensiunea celor doua fisiere si in functie de rezultat va intoarce
urmatoarele coduri de retur:
REM 1 - fisierul 1 este mai mare decat fisierul 2
REM 2 - fisierul 1 are aceeasi dimensiune ca fisierul 2
REM 3 - fisierul 1 este mai mic decat fisierul 2
REM Apoi, in functie de codul de retur, cu ajutorul lui IF ERRORLEVEL vom tipari un mesaj
corespunzator
@echo off
REM daca nu avem parametrii sar la sfarsit
if !%1==! goto end
if !%2==! goto end
REM daca nu exista fisierele furnizate ca si parametrii sar la sfarsit
if not exist %1 goto end
if not exist %2 goto end
REM apelez programul compar.exe cu parametrii cele doua nume de fisiere
REM (folosesc call pentru ca executia sa revina in fisierul bat) si in
REM functie de codul de retur afisez mesaje corespunzatoare.
REM De notat, folosirea codurilor de retur in ordine descrescatoare (4,3,2,1)!
call compar.exe %1 %2
if errorlevel 4 goto et4
if errorlevel 3 goto et3
if errorlevel 2 goto et2
if errorlevel 1 echo fisierul %1 este mai mare decat fisierul %2
goto end
:et4
echo Eroare interna
goto end
:et3
echo fisierul %1 este mai mic decat fisierul %2
goto end
:et2
echo fisierul %1 are aceeasi dimensiune ca fisierul %2
:end
Programul care va compara dimensiunea celor doua fisiere este un program pascal, compar.pas, (in
format executabil) care va fi compilat
cu tpc (C:\temp>tpc compar.pas). Vom folosi urmatoarele functii mai speciale:
ParamCount - numarul de parametri din linia de comanda
ParamStr(i) - al i-lea parametru din linia de comanda
Halt(n) - iese din program cu codul de retur n
program compara;
var
f1, f2: file;
size1, size2 : Longint;
begin
{ verificam daca am primit destui parametrii in linia de comanda }
if (ParamCount<2) then begin
writeln('Nu am primit destui parametrii!');
halt(4);
end;
{ deschidem cele doua fisiere si ne pozitionam la inceputul lor }
Assign(f1, ParamStr(1));
Assign(f2, Paramstr(2));
Reset(f1);
Reset(f2);
{ calculam dimensiunea fisierelor }
size1 := FileSize(f1);
size2 := FileSize(f2);
{ comanda Halt(n) iese din program cu codul de retur n }
if (size1>size2) then
halt(1) { fisierul 1 este mai mare decat fisierul 2 }
else if (size1=size2) then
halt(2) { fisierul 1 are aceeasi dimensiune ca fisierul 2 }
else
halt(3); { fisierul 1 este mai mic decat fisierul 2 }
Close(f1);
Close(f2);
end.
Programul care compara dimensiunea celor doua fisiere il putem scrie si in C si il compilam cu bcc
(C:\temp>bcc compar.c)
Parametrii din linia de comanda sunt accesibili in limbajul C prin doua argumente ale functiei main():
argc - numarul de parametrii din linia de comanda
argv - un sir de stringuri reprezentand parametrii din linia de comanda
#include<stdio.h>
s=0;
fscanf(f,"%s",buf);
//citim in bufferul buf pana cand ajungem la sfarsitul fisierului si apoi vedem cat am citit
while(!feof(f)) {
s=s+strlen(buf);
fscanf(f,"%s",buf);
}
s=s+strlen(buf);
return s;
}
P7. Sa se verifice daca exista fisierele A, B, ... , F (in directorul curent) si
daca acestea sunt directoare. Sa se creeze structura partiala de
directoare A\B\C\D\E; A\B\C\D\F, recreand directoarele care nu exista.
P8. Sa se ordoneze alfabetic toate fisierele (continutul lor) de tip *.TXT, date ca
si
parametri (nu toti parametri sunt fisiere de tip *.txt), rezultatul
fiind fisierele corespunzatoare de tip *.ALF.
P9. Se cere un fisier de comenzi MS-DOS care primeste ca parametri un numar
oarecare
de siruri de caractere. Daca printre parametri se afla cel putin doua nume de
directoare
sa se creeze un al treilea director cu numele dat ca parametru (daca el nu exista
deja).
In acest director sa se obtina un fisier cu numele COMPLET.TXT prin
concatenarea tuturor
fisierelor (a continutului) din cele doua directoare si a caror nume este dat ca
parametru.
Ex: > fis.bat numedir abc v_#7? dir1 secv abc.txt 37a@x dir2 abc.txt a---a
tasm - este un asamblor, traduce un program scris in limbaj de asamblare in format obiect (fisier.asm ->
fisier.obj)
- lansat fara parametri furnizeaza sintaxa corecta
- exemplu de utilizare : tasm exemplu sau tasm exemplu.asm
tlink - editor de legaturi transforma un fisier din format obj in format executabil. Poate sa grupeze mai
multe fisiere obj intr-un singur program executabil.
- fis1.obj + fis2.obj + ... -> fisier.exe (sau fisier.com)
- lansat fara parametri furnizeaza sintaxa corecta
- ex. de utilizare : tlink exemplu sau tlink exemplu.obj
- optiuni mai importante: /v, /t
td - este un depanator, un program care permite rularea pas cu pas a programelor executabile.
- ex. de utilizare td exemplu sau td exemplu.exe
- TD permite doua tipuri de depanare:
1. Depanare la nivel de limbaj masina - aceasta este posibila pentru orice program executabil, exe
sau com.
2. Depanare la nivel de limbaj sursa - posibila pentru acele programe executabile care includ
informatii de depanare si pentru care este prezent fisierul sursa.
OBSERVATIE
Urmarirea programului cu Turbo Debugger se va face in fereastra CPU (se deschide din meniul
View|CPU).
Aici avem continutul registrilor si flagurilor procesorului si programul ce se executa.Acesta este prezentat
atat in limbaj de asamblare cat si direct in cod masina (adica, octet cu octet, continutul memoriei),
continutul segmentului de date (in hexa) si continutul stivei.
Putem pozitiona zona vizibila din program, zona de date si stiva folosind comanda Go to din meniul local
al ferestrei (meniul activat cu Alt-F10).
De asemenea, putem afla sau modifica valoarea unei variabile, folosind fereastra de dialog
Evaluate/Modify (deschisa cu Ctrl-F4)
ASSUME cs:text_,ds:data_
data_ SEGMENT
a db 4
b db 4
c dw 123
rez dw ?
data_ ENDS
text_ SEGMENT
start:
mov ax, data_
mov ds, ax
; Evaluarea propriu-zisa a expresiei
mov al, a ; al = a
mul b ; ax = a*b
add ax, c ; ax = a*b+c
mov rez, ax ; rez= a*b+c
; Terminarea programului
mov ax, 4c00h
int 21h
text_ ENDS
END start
4. Cerinte la laborator: