%% fileunix.tex
%%
-%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2009 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",
anche in FreeBSD, senza limiti di allineamento dei buffer. In Linux è stata
introdotta con il kernel 2.4.10, le versioni precedenti la ignorano.}
-\footnotetext[7]{introdotto con il kernel 2.6.23, per evitare una \textit{race
- condition} che si può verificare con i thread, fra l'apertura del file e
- l'impostazione della suddetta modalità con \func{fcntl}.}
+\footnotetext[7]{introdotto con il kernel 2.6.23, per evitare una
+ \itindex{race~condition} \textit{race condition} che si può verificare con i
+ \itindex{thread} \textit{thread}, fra l'apertura del file e l'impostazione
+ della suddetta modalità con \func{fcntl}.}
Questa caratteristica permette di prevedere qual è il valore del file
descriptor che si otterrà al ritorno di \func{open}, e viene talvolta usata da
all'inizio del file.
L'argomento \param{mode} indica i permessi con cui il file viene creato; i
-valori possibili sono gli stessi già visti in sez.~\ref{sec:file_perm_overview}
-e possono essere specificati come OR binario delle costanti descritte in
-tab.~\ref{tab:file_bit_perm}. Questi permessi sono filtrati dal valore di
-\var{umask} (vedi sez.~\ref{sec:file_perm_management}) per il processo.
+valori possibili sono gli stessi già visti in
+sez.~\ref{sec:file_perm_overview} e possono essere specificati come OR binario
+delle costanti descritte in tab.~\ref{tab:file_bit_perm}. Questi permessi sono
+filtrati dal valore di \itindex{umask} \textit{umask} (vedi
+sez.~\ref{sec:file_perm_management}) per il processo.
La funzione prevede diverse opzioni, che vengono specificate usando vari bit
dell'argomento \param{flags}. Alcuni di questi bit vanno anche a costituire
l'emulazione per i vecchi kernel che non hanno la system call, è stato
aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
delle librerie la funzione non è disponibile.} (quello che viene chiamato
-normalmente Unix98, vedi sez.~\ref{sec:intro_opengroup}) è stata introdotta la
+normalmente Unix98, vedi sez.~\ref{sec:intro_xopen}) è stata introdotta la
definizione di un'altra funzione di lettura, \funcd{pread}, il cui prototipo è:
\begin{prototype}{unistd.h}
{ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
\begin{functions}
\headdecl{unistd.h}
\funcdecl{int fsync(int fd)}
- Sincronizza dati e metadati del file \param{fd}
+ Sincronizza dati e meta-dati del file \param{fd}
\funcdecl{int fdatasync(int fd)}
Sincronizza i dati del file \param{fd}.
Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
file specificato, ed attendono fino alla conclusione delle operazioni;
-\func{fsync} forza anche la sincronizzazione dei metadati del file (che
+\func{fsync} forza anche la sincronizzazione dei meta-dati del file (che
riguardano sia le modifiche alle tabelle di allocazione dei settori, che gli
altri dati contenuti \index{inode} nell'inode che si leggono con \func{fstat},
come i tempi del file).
di una \itindex{race~condition} \textit{race condition}.
Inoltre come già accennato, la directory di lavoro corrente è una proprietà
-del singolo processo; questo significa che quando si lavora con i thread essa
-sarà la stessa per tutti, ma esistono molti casi in cui sarebbe invece utile
-che ogni singolo thread avesse la sua directory di lavoro.
+del singolo processo; questo significa che quando si lavora con i
+\itindex{thread} \textit{thread} essa sarà la stessa per tutti, ma esistono
+molti casi in cui sarebbe invece utile che ogni singolo \itindex{thread}
+\textit{thread} avesse la sua directory di lavoro.
Per risolvere questi problemi, riprendendo una interfaccia già presente in
Solaris, a fianco delle normali funzioni che operano sui file (come
L'idea è che si apra prima la directory che si vuole usare come base dei
pathname relativo, e si passi il file descriptor alla funzione che userà
quella directory come punto di partenza per la risoluzione.\footnote{in questo
- modo, anche quando si lavora con i thread, si può mantenere anche una
- directory di lavoro diversa per ciascuno di essi.} Con queste funzioni si
-possono anche ottenere grossi aumenti di prestazioni quando si devono eseguire
-operazioni su delle sezioni di albero dei file che prevedono gerarchie molto
-profonde e grandi quantità di file e directory, dato che basta eseguire la
-risoluzione di un pathname una sola volta (nell'apertura della directory) e
-non per ciascun file che essa contiene.
+ modo, anche quando si lavora con i \itindex{thread} \textit{thread}, si può
+ mantenere anche una directory di lavoro diversa per ciascuno di essi.} Con
+queste funzioni si possono anche ottenere grossi aumenti di prestazioni quando
+si devono eseguire operazioni su delle sezioni di albero dei file che
+prevedono gerarchie molto profonde e grandi quantità di file e directory, dato
+che basta eseguire la risoluzione di un pathname una sola volta (nell'apertura
+della directory) e non per ciascun file che essa contiene.
La sintassi generale di queste nuove funzioni è che esse prendano come primo
argomento il file descriptor della directory da usare come base, mentre gli
\begin{table}[htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|l|}
+ \begin{tabular}[c]{|l|c|l|}
\hline
- \textbf{Funzione} & \textbf{Corrispondente} \\
+ \textbf{Funzione} &\textbf{Flags} \textbf{Corrispondente} \\
\hline
\hline
- \func{faccessat} &\func{access} \\
- \func{fchmodat} &\func{chmod} \\
- \func{fchownat} &\func{chown} \\
- \func{fstatat} &\func{stat} \\
+ \func{faccessat} & -- &\func{access} \\
+ \func{fchmodat} &$\bullet$\func{chmod} \\
+ \func{fchownat} &\func{chown},\func{lchown} \\
+ \func{fstatat} &\func{stat},\func{lstat} \\
\func{futimesat} &\func{utimes} \\
\func{linkat} &\func{link} \\
\func{mkdirat} &\func{mkdir} \\