La rimozione di un file (o più precisamente della voce che lo referenzia
all'interno di una directory) si effettua con la funzione \func{unlink}; il
suo prototipo è il seguente:
-
\begin{prototype}{unistd.h}{int unlink(const char * pathname)}
Cancella il nome specificato dal pathname nella relativa directory e
decrementa il numero di riferimenti nel relativo inode. Nel caso di link
per cancellare un file o una directory (e funziona anche per i sistemi che non
supportano i link diretti). Per i file è identica a \func{unlink} e per le
directory è identica a \func{rmdir}:
-
\begin{prototype}{stdio.h}{int remove(const char *pathname)}
Cancella un nome dal filesystem. Usa \func{unlink} per i file e
\func{rmdir} per le directory.
nello stesso filesystem) si usa invece la funzione \func{rename}\footnote{la
funzione è definita dallo standard ANSI C solo per i file, POSIX estende la
funzione anche alle directory}, il cui prototipo è:
-
\begin{prototype}{stdio.h}
{int rename(const char *oldpath, const char *newpath)}
link simbolico comporta l'applicazione della funzione al file da esso
specificato. La funzione che permette di creare un nuovo link simbolico è
\func{symlink}; il suo prototipo è:
-
\begin{prototype}{unistd.h}
{int symlink(const char * oldpath, const char * newpath)}
Crea un nuovo link simbolico di nome \func{newpath} il cui contenuto è
alle informazioni del link invece che a quelle del file a cui esso fa
riferimento. Quando si vuole leggere il contenuto di un link simbolico si usa
la funzione \func{readlink}, il cui prototipo è:
-
\begin{prototype}{unistd.h}
{int readlink(const char * path, char * buff, size\_t size)}
Legge il contenuto del link simbolico indicato da \var{path} nel buffer
omonime degli analoghi comandi di shell. Per poter accedere ai tipi usati
da queste funzioni si deve includere il file \file{sys/types.h}, il
prototipo della prima è:
-
\begin{prototype}{sys/stat.h}
{int mkdir (const char * dirname, mode\_t mode)}
Crea una nuova directory vuota con il nome indicato da \var{dirname},
La seconda funzione serve ad eliminare una directory già vuota (la directory
deve cioè contenere soltanto le due voci standard \file{.} e \file{..}); il
suo prototipo è:
-
\begin{prototype}{sys/stat.h}
{int rmdir (const char * dirname)} Cancella la directory \var{dirname}, che
deve essere vuota. Il nome può essere indicato con il pathname assoluto o
In genere il kernel tiene traccia per ciascun processo dell'inode della
directory di lavoro corrente, per ottenere il pathname occorre usare una
apposita funzione di libreria, \func{getcwd}, il cui prototipo è:
-
\begin{prototype}{unistd.h}{char * getcwd (char * buffer, size\_t size)}
Restituisce il filename completo della directory di lavoro corrente nella
stringa puntata da \var{buffer}, che deve essere precedentemente
lavoro corrente. Dato che anche le directory sono file, è possibile riferirsi
ad esse anche tramite il file descriptor dell'interfaccia a basso livello, e
non solo tramite il filename, i prototipi di queste funzioni sono:
-
\begin{functions}
\headdecl{unistd.h}
\funcdecl{int chdir (const char * path)}
I tempi di ultimo accesso e modifica possono essere cambiati usando la
funzione \func{utime}, il cui prototipo è:
-
\begin{prototype}{utime.h}
{int utime(const char * filename, struct utimbuf *times)}
\secref{sec:file_suid_sgid} e spiegato in \secref{sec:proc_perms} non è
detto sia uguale all'\textit{effective user id}). Per far questo si può usare
la funzione \func{access}, il cui prototipo è:
-
\begin{prototype}{unistd.h}
{int access(const char *pathname, int mode)}
esecuzione non comporta che contenga un programma eseguibile. La funzione
ritorna zero solo se tutte i permessi controllati sono disponibili, in caso
contrario (o di errore) ritorna -1.
-
\begin{table}[htb]
\centering
\footnotesize
Per cambiare i permessi di un file il sistema mette ad disposizione due
funzioni, che operano rispettivamente su un filename e su un file descriptor,
i loro prototipi sono:
-
\begin{functions}
\headdecl{sys/types.h}
\headdecl{sys/stat.h}
Oltre che dai valori indicati in sede di creazione, i permessi assegnati ai
nuovi file sono controllati anche da una maschera di bit settata con la
funzione \func{umask}, il cui prototipo è:
-
\begin{prototype}{stat.h}
{mode\_t umask(mode\_t mask)}
Come per i permessi, il sistema fornisce anche delle funzioni che permettano
di cambiare utente e gruppo cui il file appartiene; le funzioni in questione
sono tre e i loro prototipi sono i seguenti:
-
\begin{functions}
\headdecl{sys/types.h}
\headdecl{sys/stat.h}