CATEGORII DOCUMENTE |
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 |
Vizualizari: 1203
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved