Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Serviciile DOS

c



+ Font mai mare | - Font mai mic



Serviciile DOS

In acest paragraf prezentam o serie de servicii DOS ce pot fi accesate utilizand functii de biblioteca ale limbajului C.

1) suspendarea temporara a unui program



Executia unui program poate fi suspendata temporar utilizand functia sleep.h din fisierul antet dos.h:

void sleep(unsigned secunde);

parametrul secunde specificand numarul de secunde pe care este suspendat programul.

2) utilizarea sunetelor

Generarea de sunete ce utilizeaza difuzorul calculatorului se realizeaza utilizand functiile sound si nosound:

void sound(unsigned frecventa)

genereaza un sunet cu frecventa frecventa;

void sound(unsigned frecventa)

deconecteaza difuzorul. Programul urmator genereaza un sunet de sirena dezactivat la apasarea unei taste:

Exemplu:

#include <dos.h>

#include <conio.h>

void main()

for (frecventa=1000;frecventa>=500;frecventa-=50)

}

while(!kbhit());

nosound(); }

3) obtinerea de informatii despre erori in DOS

In cazul in care un serviciu al sistemului DOS esueaza, programele pot cere informatii suplimentare despre acea eroare folosind functia dosexterr:

int dosexterr(struct DOSERROR *info_eroare);

unde structura DOSERROR are urmatoarele campuri:

struct DOSERROR;

Daca functia returneaza valoarea 0, apelul serviciului DOS nu a avut nici o eroare.

Clasa erorii descrie categotia erorii, astfel:

01H

Resurse depasite

02H

Eroare temporara

03H

Eroare de autorizare

04H

Eroare de sistem

05H

Eroare hardware

06H

Eroare de sistem nedatorata programului curent

07H

Eroare de aplicatie

08H

Articol neintalnit

09H

Format nevalid

0AH

Articol blocat

0BH

Eroare de suport

0CH

Articolul exista

0DH

Eroare necunoscuta

Parametrul de_action indica programului cum sa raspunda erorii, astfel:

01H

Mai intai incearca din nou, apoi cere interventia utilizatorului

02H

Incearca din nou, cu o intarziere, apoi cere interventia utilizatorului

03H

Cere interventia utilizatorului pentru solutie

04H

Renunta si elimina

05H

Renunta, dar nu elimina

06H

Ignora eroarea

07H

Incearca din nou dupa interventia utilizatorului

Parametrul de_locus specifica sursa erorii, astfel:

01H

Sursa necunoscuta

02H

Eroare de dispozitiv bloc

03H

Eroare de retea

04H

Eroare de dispozitiv serial

05H

Eroare de memorie

4) citirea valorilor registrului segment

Codul programului, datele si stiva sunt controlate de compilator utilizand patru registre de segment: CS, DS, ES, SS. In unele cazuri este necesar sa se cunoasca valoarea acestor registre. Pentru astfel de cazuri se utillizeaza functia segread:

void segread(struct SREGS *segs);

Structura SREGS are urmatoarele campuri:

struct SREGS

5) accesul la valorile de port

Pentrul controlul hardware de nivel inferior, compilatoarele de C pun la dispozitie urmatoarele functii:

int inport (int adresa_port); - citeste un cuvant de la portul specificat de parametrul adresa_port;

int inportb (int adresa_port); - citeste un octet de la portul specificat de parametrul adresa_port;

int outport (int adresa_port); - scrie un cuvant de la portul specificat de parametrul adresa_port;

int outportb (int adresa_port); - scrie un octet de la portul specificat de parametrul adresa_port;

6) suspendarea unui program

Pentru suspendarea unui program pe un anumit interval de timp se poate utiliza functia delay, similara functiei sleep. Functia delay are insa ca parametru o constanta exprimata in milisecunde:

void delay(unsigned milisecunde);

7) apelarea unei comenzi interne DOS

Pentru apelarea unei comenzi DOS sau a unui fisier pentru comenzi se utilizeaza functia system:

int system(const char *comanda);

Parametrul comanda este un sir de caracter care contine numele comenzii DOS sau a fisierului de comenzi. Daca functia reuseste sa execute comanda, se returneaza valoarea 0, altfel returneaza -1.

Programul urmator prezinta utilizarea functiei system.

Exemplu:

#include <stdlib.h>

#include <stdio.h>

void main(void)

8) lucrul cu vectori de intrerupere

Un vector de intrerupere este o adresa de segment si de deplasament a codului care trateaza o anumita intrerupere. Determinarea vectorului de intrerupere se realizeaza utilizand    functia _dos_getvect in modul urmator:

void interrupt(* _dos_getvect(unsigned nr_intr))();

Parametrul nr_intr specifica numarul intreruperii dorite ce poate avea valori de la 0 la 255. Programul urmator va afisa vectorii pentru toate intreruperile calculatorului:

Exemplu:

#include <stdio.h>

#include <dos.h>

void main(void)

Daca se doreste crearea unui program de tratare a unei intreruperi, vectorul de intrerupere trebuie atribuit acestui program. Aceasta atribuire se realizeaza cu ajutorul functiei _dos_setvect:

void _dos_setvect(unsigned nr_intr,

void interrupt(* handler)());

Parametrul nr_intr specifica intreruperea al carui vector trebuie modificat.

Pentru activarea si dezactivarea intreruperilor se utilizeaza functiile:

void _disable(void);

void _enable(void);

Daca se doreste reactivarea intreruperii originare se utilizeaza functia _chain_interrupt:

void chain_interrupt(void(interrupt far *handler)());

Generarea unei intreruperi se realizeaza folosind functia geninterrupt:

void geninterrupt(int intrerupere);

unde parametrul intrerupere specifica intreruperea generata.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1203
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved