From 3784ad7b630a8e2cfa43d2a8c86dcce4d55dcd1c Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 16 May 2001 18:35:53 +0000 Subject: [PATCH] Poche aggiunte --- filedir.tex | 51 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/filedir.tex b/filedir.tex index 34e64d9..a8b3a8b 100644 --- a/filedir.tex +++ b/filedir.tex @@ -236,34 +236,38 @@ non sono in grado di gestire e la cui rimozione diventa estremamente complicata (in genere occorre far girare il programma \texttt{fsck} per riparare il filesystem). - La rimozione di un file (o più precisamente della voce che lo referenzia) si effettua con la funzione \texttt{unlink}; il suo prototipo è il seguente: \begin{prototype}{unistd.h}{int unlink(const char * filename)} Cancella il nome specificato dal pathname nella relativa directory e - decrementa il numero di riferimenti nel relativo inode. + decrementa il numero di riferimenti nel relativo inode. Nel caso di link + simbolico cancella il link simbolico; nel caso di socket, fifo o file di + dispositivo rimuove il nome, ma come per i file i processi che hanno aperto + uno di questi oggetti possono continuare ad utilizzarlo. La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso il file non viene toccato. La variabile \texttt{errno} viene settata secondo i seguenti codici di errore: \begin{errlist} - \item \texttt{EXDEV} \texttt{oldname} e \texttt{newname} non sono sullo - stesso filesystem. - \item \texttt{EPERM} il filesystem che contiene \texttt{oldname} e - \texttt{newname} non supporta i link diretti. - \item \texttt{EACCESS} - Non c'è il permesso di scrittura per la directory in cui si vuole creare - il nuovo link. - \item \texttt{EEXIST} Un file (o una directory) con quel nome esiste di - già. - \item \texttt{EMLINK} Ci sono troppi link al file \texttt{oldname} (il - numero massimo è specificato dalla variabile \texttt{LINK\_MAX}, vedi - \secref{sec:xxx_limits}. - \item \texttt{ENOSPC} La directory in cui si vuole creare il link è piena e - non può essere ampliata. - \item \texttt{EROFS} La directory su cui si vuole inserire il nuovo link è - su un filesystem montato readonly. + \item \texttt{EACCESS} Non c'è il permesso di scrittura per la directory in + cui si vuole creare il nuovo link o una delle directory del pathname non + consente la ricerca (permesso di esecuzione). + \item \texttt{EPERM} il pathname indica una directory o il filesystem che + contiene \texttt{filename} non consente l'operazione. + \item \texttt{EROFS} \texttt{filename} è su un filesystem montato in sola + lettura. + \item \texttt{EFAULT} la stringa \texttt{filename} è fuori dello spazio di + indirizzi del processo. + \item \texttt{ENAMETOOLONG} il pathname è troppo lungo. + \item \texttt{ENOENT} Uno dei componenti del pathname non esiste o è un link + simbolico spezzato. + \item \texttt{ENOTDIR} Uno dei componenti del pathname non è una directory. + \item \texttt{EISDIR} il pathname indica una directory. + \item \texttt{ENOMEM} Memoria insufficiente nel kernel. + \item \texttt{ELOOP} Ci sono troppi link simbolici nella risoluzione del + pathname. + \item \texttt{EIO} Errore di input/output. \end{errlist} \end{prototype} @@ -271,7 +275,7 @@ Per cancellare una voce in una directory scrittura su di essa (dato che si va a rimuovere una voce dal suo contenuto) e il diritto di esecuzione sulla directory che la contiene (torneremo in dettaglio sui permessi e gli attributi fra poco), se inoltre lo -\textit{sticky} bit è settato occorerà anche essere proprietari del file o +\textit{sticky} bit è settato occorrerà anche essere proprietari del file o proprietari della directory (o root, per cui nessuna delle restrizioni è applicata). @@ -290,11 +294,18 @@ usata per essere sicuri di non lasciare file temporanei su disco in caso di crash dei programmi; la tecnica è quella di aprire il file e chiamare \texttt{unlink} subito dopo. +Al contrario di quanto avviene con altri unix in linux non è possibile usare +\texttt{unlink} per cancellare una directory + + \subsection{Le funzioni \texttt{remove} e \texttt{rename}} \label{sec:filedir_cre_canc} + + + \subsection{I link simbolici} \label{sec:filedir_sym_link} @@ -302,7 +313,7 @@ Siccome la funzione \texttt{link} crea riferimenti agli inodes, essa pu funzionare soltanto per file che risiedono sullo stesso filesystem, dato che in questo caso è garantita l'unicità dell'inode, e solo per un filesystem di tipo unix. Inoltre in linux non è consentito eseguire un link diretto ad una -directory se non si è root. +directory. Per ovviare a queste limitazioni i sistemi unix supportano un'altra forma di link (i cosiddetti \textit{soft link} o \textit{symbolic link}), che sono, -- 2.30.2