Correzioni varie.
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 29 Oct 2001 18:56:18 +0000 (18:56 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 29 Oct 2001 18:56:18 +0000 (18:56 +0000)
filedir.tex
process.tex

index f5261b3a435ae2a95dc6757a7eab78d37d2e360b..ad974943d873267d91a6becdd49627d0e58f4fce 100644 (file)
@@ -235,9 +235,10 @@ cancellato e rimpiazzato (atomicamente).
 Se \var{oldpath} è una directory allora \var{newpath} se esiste deve essere
 una directory vuota, altrimenti si avranno gli errori \macro{ENOTDIR} (se non
 è una directory) o \macro{ENOTEMPTY} (se non è vuota). Chiaramente
-\var{newpath} non può contenere \var{oldpath}. 
+\var{newpath} non può contenere \var{oldpath} altrimenti si avrà un errore
+\macro{EINVAL}.
 
-Se \var{oldpath} si riferisce a un link simbolico questo sara rinominato; se
+Se \var{oldpath} si riferisce a un link simbolico questo sarà rinominato; se
 \var{newpath} è un link simbolico verrà cancellato come qualunque altro file.
 Infine qualora \var{oldpath} e \var{newpath} siano due nomi dello stesso file
 lo standard POSIX prevede che la funzione non dia errore, e non faccia nulla,
@@ -258,60 +259,59 @@ presente una istanza di \var{newpath}, tuttavia nella sovrascrittura potr
 esistere una finestra in cui sia \var{oldpath} che \var{newpath} fanno
 riferimento allo stesso file.
 
+
 \subsection{I link simbolici}
 \label{sec:file_symlink}
 
-Siccome la funzione \func{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.
+Come abbiamo visto in \secref{sec:file_link} la funzione \func{link} crea
+riferimenti agli inodes, pertanto può funzionare soltanto per file che
+risiedono sullo stesso filesysteme solo per un filesystem di tipo unix.
+Inoltre abbiamo visto che in Linux non è consentito eseguire un link diretto
+ad una 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,
-come avviene in altri sistemi operativi, dei file che contengono il
+come avviene in altri sistemi operativi, dei file speciali che contengono il
 semplicemente il riferimento ad un altro file (o directory). In questo modo è
-possibile effettuare link anche attraverso filesystem diversi e a directory, e
-pure a file che non esistono ancora.
+possibile effettuare link anche attraverso filesystem diversi, in filesystem
+che non supportano i link diretti, link alle directory, e pure a file che non
+esistono ancora.
 
 Il sistema funziona in quanto i link simbolici sono contrassegnati come tali
-al kernel (analogamente a quanto avviene per le directory) per cui la chiamata
-ad una \var{open} o una \var{stat} su un link simbolico comporta la lettura
-del contenuto del medesimo e l'applicazione della funzione al file specificato
-da quest'ultimo. Invece altre funzioni come quelle per cancellare o rinominare
-i file operano direttamente sul link simbolico (per l'elenco vedi \ntab).
-Inoltre esistono funzioni apposite, come la \func{readlink} e la \func{lstat}
-per accedere alle informazioni del link invece che a quelle del file a cui
-esso fa riferimento.
-
-Le funzioni per operare sui link simbolici sono le seguenti, esse sono tutte
-dichiarate nell'header file \file{unistd.h}.
+al kernel (analogamente a quanto avviene per le directory) per cui per alcune
+funzioni di libreria (come \func{open} o \func{stat}) l'indicazione di un link
+simbolico 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 * oldname, const char * newname)}
-  Crea un nuovo link simbolico al file indicato da \var{oldname} dandogli
-  nome \func{newname}.
+  {int symlink(const char * oldpath, const char * newpath)} 
+  Crea un nuovo link simbolico di nome \func{newpath} il cui contenuto è
+  \func{oldpath}.
   
-  La funzione restituisce zero in caso di successo e -1 per un errore, in caso
-  di errore. La variabile \var{errno} viene settata secondo i codici di
-  errore standard di accesso ai file (trattati in dettaglio in
-  \secref{sec:file_access_control}) ai quali si aggiungono i seguenti:
+  La funzione restituisce zero in caso di successo e -1 per un errore, nel
+  qual caso la variabile \var{errno} restituisce i valori:
   \begin{errlist}
-  \item \macro{EEXIST} Un file (o una directory) con quel nome esiste di
-    già.
-  \item \macro{EROFS} La directory su cui si vuole inserire il nuovo link è
-    su un filesystem montato in sola lettura.
-  \item \macro{ENOSPC} La directory o il filesystem in cui si vuole creare il
-    link è piena e non c'è ulteriore spazio disponibile.
-  \item \macro{ELOOP} Ci sono troppi link simbolici nella risoluzione di
-    \var{oldname} o di \var{newname}.
+  \item \macro{EEXIST} esiste già un file \var{newpath}.
+  \item \macro{EROFS} \var{newpath} è su un filesystem montato in sola lettura.
+  \item \macro{ENOENT} una componente di \var{newpath} non esiste o
+    \func{oldpath} è una stringa vuota.
   \end{errlist}
+  ed inoltre \macro{ENAMETOOLONG}, \macro{ENOSPC}, \macro{ENOMEM},
+  \macro{ELOOP}, \macro{EACCES}, \macro{EIO} e \macro{ENOTDIR}.
 \end{prototype}
 
-Dato che, come indicato in \secref{tab:file_symb_effect}, la funzione
-\func{open} segue i link simbolici, è necessaria usare un'altra funzione
-quando si vuole leggere il contenuto di un link simbolico, questa funzione è
-la:
+
+
+
+
+
+Inoltre esistono funzioni apposite, come la \func{readlink} e la \func{lstat}
+per accedere alle informazioni del link invece che a quelle del file a cui
+esso fa riferimento. Dato che, come indicato in \secref{tab:file_symb_effect},
+la funzione \func{open} segue i link simbolici, è necessaria usare un'altra
+funzione quando si vuole leggere il contenuto di un link simbolico, questa
+funzione è la:
 
 \begin{prototype}{unistd.h}
 {int readlink(const char * path, char * buff, size\_t size)} 
index d3fa51d41ca3f9f6e280dd3d4056a61af62507eb..5114b01e40125dba4ab8ed3f3cd436f5471d4893 100644 (file)
@@ -961,14 +961,26 @@ Il passaggio di una variabile \textit{by value} significa che in realt
 che viene passato alla subroutine è una copia del valore attuale di quella
 variabile, copia che la subroutine potrà modificare a piacere, senza che il
 valore originale nella routine chiamante venga toccato. In questo modo non
-occorre preoccuparsi di eventuali effetti delle operazioni della subroutine.
+occorre preoccuparsi di eventuali effetti delle operazioni della subroutine
+sulla variabile passata come parametro.
 
-La maggior parte delle funzioni di libreria e delle system call funziona
-esattamente in questo modo restituendo eventuali risultati alla routine
-chiamante attraverso il valore di ritorno. Talvolta però è necessario che la
-funzione possa restituire indietro alla funzione chiamate un valore relativo
-ad uno dei sui parametri.
+Questo però va inteso nella maniera corretta. Il passaggio \textit{by value}
+vale per qualunque variabile, puntatori compresi; quando però in una
+subroutine si usano dei puntatori (ad esempio per scrivere in un buffer) in
+realtà si va a modificare la zona di memoria a cui essi puntano, per cui anche
+se i puntatori sono copie, i dati a cui essi puntano sono sempre gli stessi, e
+le eventuali modifiche avranno effetto e saranno visibili anche nella routine
+chiamante.
 
+Nella maggior parte delle funzioni di libreria e delle system call i puntatori
+vengono usati per scambiare dati (attraverso buffer o strutture) e le
+variabili semplici vengono usate per specificare parametri; in genere le
+informazioni a riguardo dei risultati vengono passate alla routine chiamante
+attraverso il valore di ritorno.  Talvolta però è necessario che la funzione
+possa restituire indietro alla funzione chiamate un valore relativo ad uno dei
+suoi parametri. Per far questo si usa il cosiddetto \textit{}. Pertanto occorre
+tenere conto che quando si vuole restituire un risultato alla funzione
+chiamante occorre usare un puntatore.
 
 
 
@@ -976,6 +988,7 @@ ad uno dei sui parametri.
 \label{sec:proc_auto_var}
 
 
+
 \subsection{Il controllo di flusso non locale}
 \label{sec:proc_longjmp}