Sisteme de operare 2
Cuprins
Apeluri sistem Descriptorii de fisiere Apelul sistem open Apelul sistem creat Apelul sistem lseek Exemplu
Apeluri sistem
Functii prin care un sistem de operare ofera servicii programatorilor Sunt apelabile ca un apel obisnuit de functie Pentru functiile obisnuite
codul functiei este prezent in biblioteca este adaugat programului in care se apeleaza functia la linkeditare Codul de biblioteca pregateste intrarea in sistemul de operare Preluarea rezultatelor si transmiterea lor spre programul apelant Executia are loc intr-o secventa ce face parte din sistemul de operare Intrarea in sistem = schimbarea regimului de munca din modul neprivilegiat in modul privilegiat
Descriptori de fisier
Identificator prin care nucleul Unix identifica toate fisierele deschise de un proces Intreg nenegativ
atribuit de nucleu la deschiderea fisierului ce ramane valabil pana la inchiderea acestuia Operatia prin care intre un proces si un fisier se creeaza un canal de comunicare Fisierul standard de intrare - descriptorul 0 Fisierul standard de iesire - descriptorul 1 Fisierul standard de eroare - descriptorul 2
Deschiderea de fisier
Descriptorii de fisiere
Sunt limitati la nivelul unui proces 32 sau 64 Pot fi referiti prin constante simbolice
STDIN_FILENO STDOUT_FILENO STDERR_FILENO Definite
la fiecare fisier deschis de sistemul de operare intreg ne-negativ relativ la inceputul fisierului initializat la zero la deschiderea fisierului (daca nu apare O_APPEND)
sintaxa: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, off_t offset, int whence);
-> valoarea deplasamentului va fi offset fata de inceputul fisierului SEEK_CUR -> valoarea deplasamentului va fi vechea sa valoare plus valoarea offset SEEK_END -> valoarea deplasamentului va fi lungimea curenta a fisierului la care se adauga valoarea offset
Exemplu
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> char buf1[]=abcdefghij; char buf2[]=ABCDEFGHIJ;
Exemplu
int main(void) { int fd; if((fd=creat(fis.gol,0644))<0) { printf(eroare creare\n); exit(1); }
Exemplu
if(write(fd,buf1,10)!=10) { printf(eroare scriere buf1 \n); exit(2); } // deplasamentul a devenit 10 if (lseek(fd, 40, SEEK_SET)==-1) { printf(eroare lseek\n); exit(3); }
Exemplu
//acum deplasamentul este 40 if(write(fd,buf2,10)!=10) { printf(eroare scriere buf2\n); exit(4); } // deplasamentul este acum 50 exit(0); }
Bibliografie
Ioan Jurca Programarea de sistem in UNIX, Editura de Vest, Timisoara, 2004