X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filedir.tex;h=ed7c7bc4576d4d03233bf774fc48db40bee68541;hb=1df343113e14ea885c3c3fdb985b2cb84230bd62;hp=ffd263bc70cbb3c5bc3066bc17cf7b407c71cf75;hpb=29b7512f9179b716d031c978cd39dc96cd84b8b7;p=gapil.git diff --git a/filedir.tex b/filedir.tex index ffd263b..ed7c7bc 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1,6 +1,6 @@ %% filedir.tex %% -%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -155,10 +155,9 @@ suo prototipo La funzione cancella il nome specificato da \param{pathname} nella relativa directory e decrementa il numero di riferimenti nel relativo inode\index{inode}. Nel caso di link simbolico cancella il link simbolico; nel -caso di socket\index{socket}, fifo o file di -dispositivo\index{file!di~dispositivo} rimuove il nome, ma come per i file i -processi che hanno aperto uno di questi oggetti possono continuare ad -utilizzarlo. +caso di socket, fifo o file di dispositivo\index{file!di~dispositivo} rimuove +il nome, ma come per i file i processi che hanno aperto uno di questi oggetti +possono continuare ad utilizzarlo. Per cancellare una voce in una directory è necessario avere il permesso di scrittura su di essa, dato che si va a rimuovere una voce dal suo contenuto, e @@ -576,8 +575,8 @@ consentir Finora abbiamo parlato esclusivamente di file, directory e link simbolici; in sez.~\ref{sec:file_file_types} abbiamo visto però che il sistema prevede pure degli altri tipi di file speciali, come i file di dispositivo -\index{file!di~dispositivo} e le fifo (i socket\index{socket} sono un caso a -parte, che vedremo in cap.~\ref{cha:socket_intro}). +\index{file!di~dispositivo} e le fifo (i socket sono un caso a parte, che +tratteremo in cap.~\ref{cha:socket_intro}). La manipolazione delle caratteristiche di questi file e la loro cancellazione può essere effettuata con le stesse funzioni che operano sui file regolari; ma @@ -615,11 +614,11 @@ permessi sono comunque modificati nella maniera usuale dal valore di \var{umask} (si veda sez.~\ref{sec:file_umask}). Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per -un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un device a -blocchi, \const{S\_IFCHR} per un device a caratteri e \const{S\_IFIFO} per una -fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora si sia -specificato in \param{mode} un file di dispositivo, il valore di \param{dev} -viene usato per indicare a quale dispositivo si fa riferimento. +un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un dispositivo +a blocchi, \const{S\_IFCHR} per un dispositivo a caratteri e \const{S\_IFIFO} +per una fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora +si sia specificato in \param{mode} un file di dispositivo, il valore di +\param{dev} viene usato per indicare a quale dispositivo si fa riferimento. Solo l'amministratore può creare un file di dispositivo o un file regolare usando questa funzione; ma in Linux\footnote{la funzione non è prevista dallo @@ -909,20 +908,27 @@ ed ordinamento) del contenuto di una directory; la funzione Al solito, per la presenza fra gli argomenti di due puntatori a funzione, il prototipo non è molto comprensibile; queste funzioni però sono quelle che -controllano rispettivamente la selezione di una voce (\param{select}) e -l'ordinamento di tutte le voci selezionate (\param{compar}). +controllano rispettivamente la selezione di una voce (quella passata con +l'argomento \param{select}) e l'ordinamento di tutte le voci selezionate +(quella specificata dell'argomento \param{compar}). La funzione legge tutte le voci della directory indicata dall'argomento -\param{dir}, passando ciascuna di esse come argomento alla funzione di -\param{select}; se questa ritorna un valore diverso da zero la voce viene -inserita in una struttura allocata dinamicamente con \func{malloc}, qualora si -specifichi un valore \val{NULL} per \func{select} vengono selezionate tutte le -voci. Tutte le voci selezionate vengono poi inserite un una lista (anch'essa -allocata con \func{malloc}, che viene riordinata tramite \func{qsort} usando -la funzione \param{compar} come criterio di ordinamento; alla fine l'indirizzo -della lista ordinata è restituito nell'argomento \param{namelist}. - -Per l'ordinamento sono disponibili anche due funzioni predefinite, +\param{dir}, passando ciascuna di esse (una struttura \struct{dirent}) come +argomento della funzione di selezione specificata da \param{select}; se questa +ritorna un valore diverso da zero la voce viene inserita in un vettore che +viene allocato dinamicamente con \func{malloc}. Qualora si specifichi un +valore \val{NULL} per \func{select} vengono selezionate tutte le voci. + +Le voci selezionate possono essere riordinate tramite \func{qsort}, le modalità +del riordinamento possono essere personalizzate usando la funzione +\param{compar} come criterio di ordinamento di\func{qsort}, la funzione prende +come argomenti le due strutture \struct{dirent} da confrontare restituendo un +valore positivo, nullo o negativo per indicarne l'ordinamento; alla fine +l'indirizzo della lista delle strutture \struct{dirent} così ordinate viene +restituito nell'argomento \param{namelist}. + +Per l'ordinamento (vale a dire come valori possibili per l'argomento +\param{compar}) sono disponibili anche due funzioni predefinite, \funcd{alphasort} e \funcd{versionsort}, i cui prototipi sono: \begin{functions} \headdecl{dirent.h} @@ -1315,7 +1321,7 @@ della directory condition}\itindex{race~condition} non si pongono. -\section{La manipolazione delle caratteristiche dei files} +\section{La manipolazione delle caratteristiche dei file} \label{sec:file_infos} Come spiegato in sez.~\ref{sec:file_filesystem} tutte le informazioni generali @@ -1336,7 +1342,7 @@ sez.~\ref{sec:file_access_control}). La lettura delle informazioni relative ai file è fatta attraverso la famiglia delle funzioni \func{stat} (\funcd{stat}, \funcd{fstat} e \funcd{lstat}); questa è la funzione che ad esempio usa il comando \cmd{ls} per poter ottenere -e mostrare tutti i dati dei files. I prototipi di queste funzioni sono i +e mostrare tutti i dati dei file. I prototipi di queste funzioni sono i seguenti: \begin{functions} \headdecl{sys/types.h} @@ -1349,7 +1355,7 @@ seguenti: \funcdecl{int lstat(const char *file\_name, struct stat *buf)} Identica a \func{stat} eccetto che se il \param{file\_name} è un link simbolico vengono - lette le informazioni relativae ad esso e non al file a cui fa riferimento. + lette le informazioni relative ad esso e non al file a cui fa riferimento. \funcdecl{int fstat(int filedes, struct stat *buf)} Identica a \func{stat} eccetto che si usa con un file aperto, specificato tramite il suo file @@ -1398,9 +1404,9 @@ di file Dato che il valore numerico può variare a seconda delle implementazioni, lo standard POSIX definisce un insieme di macro per verificare il tipo di file, queste vengono usate anche da Linux che supporta pure le estensioni allo -standard per i link simbolici e i socket\index{socket} definite da BSD; -l'elenco completo delle macro con cui è possibile estrarre l'informazione da -\var{st\_mode} è riportato in tab.~\ref{tab:file_type_macro}. +standard per i link simbolici e i socket definite da BSD; l'elenco completo +delle macro con cui è possibile estrarre l'informazione da \var{st\_mode} è +riportato in tab.~\ref{tab:file_type_macro}. \begin{table}[htb] \centering \footnotesize @@ -1415,7 +1421,7 @@ l'elenco completo delle macro con cui \macro{S\_ISBLK(m)} & dispositivo a blocchi\\ \macro{S\_ISFIFO(m)} & fifo \\ \macro{S\_ISLNK(m)} & link simbolico \\ - \macro{S\_ISSOCK(m)} & socket\index{socket} \\ + \macro{S\_ISSOCK(m)} & socket \\ \hline \end{tabular} \caption{Macro per i tipi di file (definite in \texttt{sys/stat.h}).} @@ -1443,7 +1449,7 @@ un'opportuna combinazione. \hline \hline \const{S\_IFMT} & 0170000 & maschera per i bit del tipo di file \\ - \const{S\_IFSOCK} & 0140000 & socket\index{socket} \\ + \const{S\_IFSOCK} & 0140000 & socket \\ \const{S\_IFLNK} & 0120000 & link simbolico \\ \const{S\_IFREG} & 0100000 & file regolare \\ \const{S\_IFBLK} & 0060000 & dispositivo a blocchi \\ @@ -1534,8 +1540,8 @@ dimensione si possono usare le due funzioni \funcd{truncate} e \func{ftruncate} si hanno i valori: \begin{errlist} \item[\errcode{EBADF}] \param{fd} non è un file descriptor. - \item[\errcode{EINVAL}] \param{fd} è un riferimento ad un - socket\index{socket}, non a un file o non è aperto in scrittura. + \item[\errcode{EINVAL}] \param{fd} è un riferimento ad un socket, non a un + file o non è aperto in scrittura. \end{errlist} per \func{truncate} si hanno: \begin{errlist} @@ -2032,8 +2038,9 @@ proposito). Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione mutuata da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo sia anche il corrispondente bit di esecuzione viene utilizzato per attivare -per quel file il \textit{mandatory locking} (affronteremo questo argomento in -dettaglio più avanti, in sez.~\ref{sec:file_mand_locking}). +per quel file il \itindex{mandatory~locking} \textit{mandatory locking} +(affronteremo questo argomento in dettaglio più avanti, in +sez.~\ref{sec:file_mand_locking}). \itindend{suid~bit} \itindend{sgid~bit} @@ -2045,7 +2052,7 @@ dettaglio pi L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in parte un rimasuglio delle origini dei sistemi Unix. A quell'epoca infatti la -memoria virtuale e l'accesso ai files erano molto meno sofisticati e per +memoria virtuale e l'accesso ai file erano molto meno sofisticati e per ottenere la massima velocità possibile per i programmi usati più comunemente si poteva impostare questo bit. @@ -2414,7 +2421,7 @@ privilegi di root entrambi i bit \itindex{suid~bit} \acr{suid} e \itindex{sgid~bit} \acr{sgid} vengono cancellati. Questo non avviene per il bit \acr{sgid} nel caso in cui esso sia usato (in assenza del corrispondente permesso di esecuzione) per indicare che per il file è attivo il -\textit{mandatory locking}. +\itindex{mandatory~locking} \textit{mandatory locking}. \subsection{Un quadro d'insieme sui permessi} @@ -2447,7 +2454,8 @@ ha alcun effetto qualora il processo possieda i privilegi di amministratore. \hline 1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del proprietario\\ -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo proprietario\\ - -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\ + -&1&-&-&-&0&-&-&-&-&-&-&Il \itindex{mandatory~locking} + \textit{mandatory locking} è abilitato\\ -&-&1&-&-&-&-&-&-&-&-&-&Non utilizzato\\ -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il proprietario\\ -&-&-&-&1&-&-&-&-&-&-&-&Permesso di scrittura per il proprietario\\ @@ -2603,3 +2611,34 @@ programmi e librerie) di cui il server potrebbe avere bisogno. %%% mode: latex %%% TeX-master: "gapil" %%% End: + +% LocalWords: sez like filesystem unlink MacOS Windows VMS inode kernel unistd +% LocalWords: un'etichetta int const char oldpath newpath errno EXDEV EPERM st +% LocalWords: EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls +% LocalWords: ELOOP ENOSPC EIO pathname nlink stat vfat fsck EISDIR ENOENT cap +% LocalWords: POSIX socket fifo sticky root nell'inode system call count crash +% LocalWords: all'inode descriptor remove rename rmdir stdio glibc libc NFS DT +% LocalWords: ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig +% LocalWords: dangling access chdir chmod chown creat exec lchown lstat mkdir +% LocalWords: mkfifo mknod opendir pathconf readlink truncate path buff size +% LocalWords: grub bootloader grep linux MAXSYMLINKS cat VFS sys dirname fcntl +% LocalWords: dev l'inode umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL +% LocalWords: stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct +% LocalWords: EBADF namlen HAVE thread entry result value argument fileno ino +% LocalWords: name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF +% LocalWords: DTYPE off reclen seekdir telldir void rewinddir closedir select +% LocalWords: namelist compar malloc qsort alphasort versionsort strcoll myls +% LocalWords: strcmp DirScan direntry while current working home shell pwd get +% LocalWords: dell'inode getcwd ERANGE getwd change fd race condition tmpnam +% LocalWords: string tmpdir TMP tempnam pfx TMPNAME suid tmp EXCL tmpfile pid +% LocalWords: EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf +% LocalWords: mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT +% LocalWords: ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID +% LocalWords: ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH du +% LocalWords: blocks blksize holes lseek TRUNC ftruncate length lenght ETXTBSY +% LocalWords: hole atime read utime mtime write ctime modification leafnode cp +% LocalWords: make fchmod fchown utimbuf times actime modtime Mac owner uid fs +% LocalWords: gid Control List patch mandatory control execute group other all +% LocalWords: dell' effective passwd IGID locking swap saved text IRWXU IRWXG +% LocalWords: IRWXO ext reiser capability FSETID mask capabilities chroot jail +% LocalWords: FTP Di