Linguaggio C - unistd.h (interfaccia con il sistema Unix)

Le funzioni di interfaccia con il sistema operativo non fanno parte dello standard ANSI del C, ma sono implementate in quasi tutte le versioni dei compilatori.
Per motivi storici fanno riferimento al sistema operativo Unix e pertanto ci possono essere alcune differenze fra le varie versioni dei compilatori C anche in riferimento al sistema operativo su cui girano.

Forse e' anche per questo motivo che i nomi degli header possono variare da un implementazione all'altra dei compilatori.
Nella normalita' dei casi, i prototype delle funzioni open() e creat() sono contenuti nell'header fcntl.h, mentre per altri prototype di funzioni (per es: close(), read() e write()) nessuno standard (nemmeno de facto) prevede un nome univoco per l'header. Nella presente descrizione faccio riferimento al compilatore GNU gcc o egcs su sistema operativo Linux.

Per quanto riguarda l'accesso alle periferiche che non siano dei files, vale ancora quanto detto a proposito della libreria standard di I/O.

Per potere effettuare qualsiasi operazione di I/O su file (es: lettura, scrittura, posizionamento, ...) e' necessario aprire il file al trattamento dei dati. Una volta terminate le operazioni di I/O e' necessario chiudere il file precedentemente aperto. Tipicamente questa operazione avviene al termine del programma, oppure al termine "logico" di macro-operazione (es: salvataggio di dati su un file: apro il file, scrivo le informazioni, chiudo il file).

L'apertura o la creazione di un file ritorna un valore di tipo int e costituisce il file descriptor che deve essere passato come argomento nelle funzioni di I/O da chiamare successivamente.
L'apertura di un file ritorna il valore < 0 in caso di fallimento.

Ogni programma C ha a disposizione 3 file descriptor aperti:
o 0 Corrisponde allo stdin della libreria stdio.h e definisce il flusso di input dei dati.
Tipicamente il flusso di input proviene dalla tastiera, ma puo' anche provenire da un file rediretto in input con il carattere di redirezione <, oppure puo' provenire dall'output dello stdout di un altro programma e collegato in pipe con il carattere | (es: ls | more), oppure puo' essere presente nello script di esecuzione se l'input del programma viene opportunamente rediretto con i caratteri << oppure con <<-
o 1 Corrisponde allo stdout della libreria stdio.h e definisce il flusso di output dei dati.
Tipicamente i dati in output su stdout vengono emessi sullo schermo del terminale, del PC, o nella finestra di esecuzione dell'applicazione.
In alternativa, l'output del programma puo' costituire l'input di un altro programma collegato tramite pipe |, oppure puo' essere rediretto su un file tramite > (sovrascrittura dei dati) oppure >> (append dell'output).
o 2 Corrisponde allo stderr della libreria stdio.h e definisce il flusso di output dei messaggi di errore.
Puo' essere lo schermo del terminale, del PC, o della finestra di dove sta' girando l'applicazione.
Con i sistemi operativi MS-DOS (e Windows) non e' possibile alcuna redirezione.
Con i sitemi Unix-like (es. Linux), e' possibile redirigere lo stderr su file con 2> o immetterlo sullo stdout con 2>&1

Per utilizzare la libreria di interfaccia con il sistema operativo e' necessario includere nel file sorgente gli header indicati di volta in volta. Per es:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

Funzioni sui files

o open(), creat()
o close()
o link()
o symlink()
o unlink()
o fcntl()
o ioctl()
o lseek()
o read()
o write()
o access()
o stat(), lstat(), fstat()
o dup(), dup2()

Funzioni sulle directory

o mkdir()
o chdir(), fchdir()
o getcwd(), get_current_dir_name(), getwd()
o rmdir()
o opendir()
o readdir()
o seekdir()
o telldir()
o rewinddir()
o scandir(), alphasort()
o closedir()

Funzioni sui processi

o alarm()
o execve()
o execl(), execv(), execle(), execlp(), execvp()
o _exit()
o fork()
o pause()
o pipe()
o sleep()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page