In questa sezione e nelle seguenti, descriveremo la libreria standard POSIX per operare sui file.
Un descrittore di file è un intero non negativo che individua un file aperto da un processo. Ogni processo possiede una tabella dei descrittori che associa ogni descrittore aperto per il processo a un file. Di solito, il descrittore 0 corrisponde al file di standard input, il descrittore 1 al file di standard output e il descrittore 2 al file di standard error. Per esigenze di standardizzazione, POSIX definisce le macro STDIN_FILENO, STDOUT_FILENO e STDERR_FILENO per questi 3 descrittori, di modo che, se nel futuro questi 3 identificatori dovessero assumere altri valori, i vecchi programmi potrebbero essere ancora usati senza modifiche, dopo una ricompilazione.
La funzione open() apre un file:
#include<sys/types.h> #include<sys/stat.h> #include<fnctl.h>
int open(const char *pathname, int oflag, ...);
|
Il parametro oflag stabilisce la modalità di apertura del file ed è l'OR tra i valori elencati in tabella 3.1. Vale la pena di fare alcune considerazioni:
Per leggere e scrivere da un file si usano le primitive read e write:
#include<unistd.h>
ssize_t read(int filedes, void *buff, size_t nbytes);
|
Entrambe ritornano il numero effettivo di bytes letti/scritti. Infine, la funzione lseek() consente di spostare il puntatore corrente del file in una posizione qualunque:
#include<sys/types.h> #include<unistd.h>
off_t lseek(int filedes, off_t offset, int whence);
|
Il parametro offset può assumere come valori che vengono interpretati a seconda del parametro whence, come elencato in tabella 3.2; la funziona ritorna la posizione assoluta raggiunta dopo il compimento dell'opearazione.
|
Per esempio, la seguente istruzione:
currpos = lseek(fd,0,SEEK_END);
sposta il puntatore al file indicato dal descrittore fd alla fine.