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:
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 <<- | |
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). | |
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>
Indice linguaggio C |
Indice librerie C |
Umberto Zappi Home Page |