next up previous
Next: open Up: Introducere Unix. Operatii I/O. Previous: GDB (GNU Debugger)

Operatii de intrare/iesire (I/O)

In UNIX/Linux, totul este un fisier (de fapt, aproape totul este un fisier). Cu alte cuvinte, marea parte a instructiunilor de mai jos vor putea fi folosite nu numai pe fisierele existente fizic pe disc, ci si pe dispozitive (pentru comunicatia pe seriala spre exemplu), pe terminale, si pe socketi. Un ``fisier'' in lumea UNIX poate fi:

Notiunea de fisier este una din abstractiile fundamentale in lumea UNIX, cealalta fiind notiunea de proces.

Intr-o definitie simplificata un proces este un program aflat in executie, deci o entitate dinamica spre deosebire de un fisier executabil care rezida pe disc.

Din punctul de vedere al utilizatorului, un fisier poate fi manipulat prin intermediul unui handler denumit descriptor de fisier. La nivelul sistemului de operare acesta este o valoarea intreaga pozitiva. La nivelul unui preoces exista o tabela de descriptori de fisiere (tabela FILE0). Aceasta tabela are o dimensiune limitata (de obicei 1024). Fiecare intrare in aceasta tabela este un pointer la o structura ce descrie fisierul utilizat, sau NULL daca descriptorul nu indica un fisier valid.

In cadrul tabelei de descriptori a unui proces primele trei intrari sunt rezervate si sunt initializate la crearea procesului

     0    -   intrarea standard (stdin); valoarea este stocata de macro-ul STDIN_FILENO;
     1    -   iesirea standard (stdout); valoarea este stocata de macro-ul STDOUT_FILENO;
     2    -   eroarea standard (stderr); valoarea este stocata de macro-ul STDERR_FILENO;

Atunci cand se deschide un nou fisier se va aloca prima intrare libera din tabela de descriptori. Pentru primul fisier deschis aceasta intrare va fi intrarea 3 din tabela.

Vom prezenta in continuare, operatiile de I/E pe fisiere de nivel 1 (sau operatii sincrone). Se numesc operatii de nivel 1 deoarece un apel al unei astfel de functii conduce, in general, la folosirea unui apel de sistem pus la dispozitie de kernel. Denumirea de operatii sincrone provine de la faptul ca o cerere de scriere/citire intr-un/dintr-un fisier va rezulta in scrierea informatiei pe disc si asteptarea (in blocare) la terminarea acesteia. Operatiile asincrone (de genul fputs, fgets, fprintf, fread, etc.) au o functionare buffer-ata si se vor intoarce inainte ca informatia sa fie efectiv scrisa pe disc.

Pentru cea mai mare parte a acestor operatii o valoare pozitiva intoarsa inseamna succes, iar o valoare negativa inseamna eroare. Detalii despre eroare se pot determina prin inspectarea variabilei globale externe errno accesibila prin includerea fisierului header standard errno.h.



Subsections
next up previous
Next: open Up: Introducere Unix. Operatii I/O. Previous: GDB (GNU Debugger)
Razvan Adrian Deaconescu 2005-10-01