sez.~\ref{sec:file_access_control}) dovranno consentire l'accesso all'intero
\textit{pathname}.
+\itindsubbeg{pathname}{assoluto}
+\itindsubbeg{pathname}{relativo}
+
Se il \textit{pathname} comincia con il carattere ``\texttt{/}'' la ricerca
parte dalla directory radice del processo. Questa, a meno di non avere
eseguito una \func{chroot} (funzione su cui torneremo in
sez.~\ref{sec:file_chroot}) è la stessa per tutti i processi ed equivale alla
directory radice dell'albero dei file montata dal kernel all'avvio del
-sistema; in questo caso si parla di un \textsl{pathname assoluto}
-\itindsub{pathname}{assoluto}. Altrimenti la ricerca parte dalla directory di
-lavoro corrente del processo (su cui torneremo in
-sez.~\ref{sec:file_work_dir}) ed il \textit{pathname} è detto
-\itindsub{pathname}{relativo} \textsl{pathname relativo}.
+sistema; in questo caso si parla di un \textsl{pathname assoluto}. Altrimenti
+la ricerca parte dalla directory di lavoro corrente del processo (su cui
+torneremo in sez.~\ref{sec:file_work_dir}) ed il \textit{pathname} è detto
+\textsl{pathname relativo}.
+
+\itindsubend{pathname}{assoluto}
+\itindsubend{pathname}{relativo}
Infine i nomi di directory ``\file{.}'' e ``\file{..}'' hanno un significato
speciale e vengono inseriti in ogni directory quando questa viene creata (vedi
directory}) cioè la directory che contiene il riferimento alla directory
corrente.
-In questo modo con ``\file{..}'' si può usare un \itindsub{pathname}{relativo}
-\textit{pathname} relativo per indicare un file posto al di sopra della
-directory corrente, tornando all'indietro nell'albero dei file. Questa
-retromarcia però su fermerà una volta raggiunta la directory radice, perché
-non esistendo in questo caso una directory superiore, il nome ``\file{..}''
-farà riferimento alla radice stessa.
+In questo modo con ``\file{..}'' si può usare un \textit{pathname} relativo
+per indicare un file posto al di sopra della directory corrente, tornando
+all'indietro nell'albero dei file. Questa retromarcia però su fermerà una
+volta raggiunta la directory radice, perché non esistendo in questo caso una
+directory superiore, il nome ``\file{..}'' farà riferimento alla radice
+stessa.
\itindend{pathname}
\itindend{pathname~resolution}
attraverso un filesystem, il cosiddetto \textit{raw access}, introdotto coi
kernel della serie 2.4.x ma ormai in sostanziale disuso.}
-\index{file!di~dispositivo|}
+\index{file!di~dispositivo|)}
\index{file!speciali|)}
Una differenza che attiene ai contenuti di un file però esiste, ed è relativa
\textbf{Tipo} & \textbf{Contenuto} \\
\hline
\hline
- \type{caddr\_t} & Core address.\\
- \type{clock\_t} & Contatore del \textit{process time} (vedi
+ \typed{caddr\_t} & Core address.\\
+ \typed{clock\_t} & Contatore del \textit{process time} (vedi
sez.~\ref{sec:sys_cpu_times}.\\
- \type{dev\_t} & Numero di dispositivo (vedi sez.~\ref{sec:file_mknod}).\\
- \type{gid\_t} & Identificatore di un gruppo (vedi
+ \typed{dev\_t} & Numero di dispositivo (vedi sez.~\ref{sec:file_mknod}).\\
+ \typed{gid\_t} & Identificatore di un gruppo (vedi
sez.~\ref{sec:proc_access_id}).\\
- \type{ino\_t} & Numero di \textit{inode}
+ \typed{ino\_t} & Numero di \textit{inode}
(vedi sez.~\ref{sec:file_vfs_work}).\\
- \type{key\_t} & Chiave per il System V IPC (vedi
+ \typed{key\_t} & Chiave per il System V IPC (vedi
sez.~\ref{sec:ipc_sysv_generic}).\\
- \type{loff\_t} & Posizione corrente in un file.\\
- \type{mode\_t} & Attributi di un file.\\
- \type{nlink\_t} & Contatore dei collegamenti su un file.\\
- \type{off\_t} & Posizione corrente in un file.\\
- \type{pid\_t} & Identificatore di un processo (vedi
+ \typed{loff\_t} & Posizione corrente in un file.\\
+ \typed{mode\_t} & Attributi di un file.\\
+ \typed{nlink\_t} & Contatore dei collegamenti su un file.\\
+ \typed{off\_t} & Posizione corrente in un file.\\
+ \typed{pid\_t} & Identificatore di un processo (vedi
sez.~\ref{sec:proc_pid}).\\
- \type{rlim\_t} & Limite sulle risorse.\\
- \type{sigset\_t}& Insieme di segnali (vedi sez.~\ref{sec:sig_sigset}).\\
- \type{size\_t} & Dimensione di un oggetto.\\
- \type{ssize\_t} & Dimensione in numero di byte ritornata dalle funzioni.\\
- \type{ptrdiff\_t}& Differenza fra due puntatori.\\
- \type{time\_t} & Numero di secondi (in \textit{calendar time}, vedi
+ \typed{rlim\_t} & Limite sulle risorse.\\
+ \typed{sigset\_t}& Insieme di segnali (vedi sez.~\ref{sec:sig_sigset}).\\
+ \typed{size\_t} & Dimensione di un oggetto.\\
+ \typed{ssize\_t} & Dimensione in numero di byte ritornata dalle funzioni.\\
+ \typed{ptrdiff\_t}& Differenza fra due puntatori.\\
+ \typed{time\_t} & Numero di secondi (in \textit{calendar time}, vedi
sez.~\ref{sec:sys_time}).\\
- \type{uid\_t} & Identificatore di un utente (vedi
+ \typed{uid\_t} & Identificatore di un utente (vedi
sez.~\ref{sec:proc_access_id}).\\
\hline
\end{tabular}
riferimento ai tipi elementari dello standard del linguaggio C, ma ad una
serie di \index{tipo!primitivo} \textsl{tipi primitivi} del sistema, riportati
in tab.~\ref{tab:intro_primitive_types}, e definiti nell'\textit{header file}
-\headfile{sys/types.h}, in modo da mantenere completamente indipendenti i tipi
+\headfiled{sys/types.h}, in modo da mantenere completamente indipendenti i tipi
utilizzati dalle funzioni di sistema dai tipi elementari supportati dal
compilatore C.
disposizione della \acr{glibc}, che rendono disponibili soltanto le funzioni
in essi definite, sono illustrate nel seguente elenco:
\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{\_\_STRICT\_ANSI\_\_}] richiede l'aderenza stretta allo standard
+\item[\macrod{\_\_STRICT\_ANSI\_\_}] richiede l'aderenza stretta allo standard
C ISO; viene automaticamente predefinita qualora si invochi il \texttt{gcc}
con le opzione \texttt{-ansi} o \texttt{-std=c99}.
-\item[\macro{\_POSIX\_SOURCE}] definendo questa macro (considerata obsoleta)
+\item[\macrod{\_POSIX\_SOURCE}] definendo questa macro (considerata obsoleta)
si rendono disponibili tutte le funzionalità dello standard POSIX.1 (la
versione IEEE Standard 1003.1) insieme a tutte le funzionalità dello
standard ISO C. Se viene anche definita con un intero positivo la macro
\macro{\_POSIX\_C\_SOURCE} lo stato di questa non viene preso in
considerazione.
-\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\macrod{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
positivo si controlla quale livello delle funzionalità specificate da POSIX
viene messa a disposizione; più alto è il valore maggiori sono le
funzionalità:
\item in futuro valori superiori potranno abilitare ulteriori estensioni.
\end{itemize}
-\item[\macro{\_BSD\_SOURCE}] definendo questa macro si rendono disponibili le
+\item[\macrod{\_BSD\_SOURCE}] definendo questa macro si rendono disponibili le
funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard
ISO C, POSIX.1 e POSIX.2; alcune delle funzionalità previste da BSD sono
però in conflitto con le corrispondenti definite nello standard POSIX.1, in
\macro{\_GNU\_SOURCE}) è stata a sua volta attivata, nel qual caso queste
hanno la precedenza. Se però si definisce \macro{\_BSD\_SOURCE} dopo aver
definito una di queste macro, l'effetto sarà quello di dare la precedenza
- alle funzioni in forma BSD. Questa macro è stata deprecata a partire dalle
- \acr{glibc} 2.20, essendo ricompresa in \macro{\_DEFAULT\_SOURCE} che è
- definita di default.
+ alle funzioni in forma BSD. Questa macro, essendo ricompresa in
+ \macro{\_DEFAULT\_SOURCE} che è definita di default, è stata deprecata a
+ partire dalle \acr{glibc} 2.20.
-\item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
+\item[\macrod{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
standard ISO C, POSIX.1, POSIX.2, e X/Open (XPG$n$) illustrati in
- precedenza. Questa macro è stata deprecata a partire dalle \acr{glibc} 2.20,
- essendo ricompresa in \macro{\_DEFAULT\_SOURCE} che è definita di default.
-
-\item[\macro{\_DEFAULT\_SOURCE}] questa macro abilita le definizioni
- considerate il \textit{default}, comprese quelle richieste dalla standard
- POSIX.1-2008, ed è sostanzialente equivalente a \macro{\_SVID\_SOURCE}
- \macro{\_BSD\_SOURCE}] e \macro{\_POSIX\_C\_SOURCE}. Essendo predefinita non
- è necessario usarla a meno di non aver richiesto delle definizioni più
- restrittive sia con altre macro che con i flag del compilatore, nel qual
- caso abilita le funzioni che altrimenti sarebbero disabilitate. Questa macro
- è stata introdotta a partire dalle \acr{glibc} 2.19 e consente di deprecare
- \macro{\_SVID\_SOURCE} e \macro{\_BSD\_SOURCE}].
-
-\item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
+ precedenza. Questa macro, essendo ricompresa in \macro{\_DEFAULT\_SOURCE}
+ che è definita di default, è stata deprecata a partire dalle \acr{glibc}
+ 2.20.
+
+\item[\macrod{\_DEFAULT\_SOURCE}] questa macro abilita le definizioni
+ considerate il \textit{default}, comprese quelle richieste dallo standard
+ POSIX.1-2008, ed è sostanzialente equivalente all'insieme di
+ \macro{\_SVID\_SOURCE}, \macro{\_BSD\_SOURCE} e
+ \macro{\_POSIX\_C\_SOURCE}. Essendo predefinita non è necessario usarla a
+ meno di non aver richiesto delle definizioni più restrittive sia con altre
+ macro che con i flag del compilatore, nel qual caso abilita le funzioni che
+ altrimenti sarebbero disabilitate. Questa macro è stata introdotta a partire
+ dalle \acr{glibc} 2.19 e consente di deprecare \macro{\_SVID\_SOURCE} e
+ \macro{\_BSD\_SOURCE}.
+
+\item[\macrod{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche
queste sono un sovrainsieme di quelle definite negli standard POSIX.1 e
POSIX.2 ed in effetti sia \macro{\_POSIX\_SOURCE} che
estensioni XSI.
\end{itemize}
-\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si rendono
+\item[\macrod{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si rendono
disponibili le ulteriori funzionalità necessarie ad essere conformi al
rilascio del marchio \textit{X/Open Unix} corrispondenti allo standard
Unix95, vale a dire quelle specificate da SUSv1/XPG4v2. Questa macro viene
definita implicitamente tutte le volte che si imposta
\macro{\_XOPEN\_SOURCE} ad un valore maggiore o uguale a 500.
-\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ISOC99\_SOURCE}] definendo questa macro si rendono disponibili
le funzionalità previste per la revisione delle librerie standard del C
introdotte con lo standard ISO C99. La macro è definita a partire dalla
versione 2.1.3 della \acr{glibc}.
viene tuttora riconosciuta come equivalente di \macro{\_ISOC99\_SOURCE} per
compatibilità.
-\item[\macro{\_ISOC11\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ISOC11\_SOURCE}] definendo questa macro si rendono disponibili
le funzionalità previste per la revisione delle librerie standard del C
introdotte con lo standard ISO C11, e abilita anche quelle previste dagli
standard C99 e C95. La macro è definita a partire dalla versione 2.16 della
\acr{glibc}.
-\item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
tutte le funzionalità disponibili nei vari standard oltre a varie estensioni
specifiche presenti solo nella \acr{glibc} ed in Linux. Gli standard coperti
sono: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, SUS.
\macro{\_XOPEN\_SOURCE\_EXTENDED} e \macro{\_XOPEN\_SOURCE} con valore 600
(o 500 per le versioni della \acr{glibc} precedenti la 2.2); oltre a queste
vengono pure attivate le ulteriori due macro \macro{\_ATFILE\_SOURCE} e
- \macro{\_LARGEFILE64\_SOURCE} che definiscono funzioni previste
+ \macrod{\_LARGEFILE64\_SOURCE} che definiscono funzioni previste
esclusivamente dalla \acr{glibc}.
\end{basedescript}
\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
+\item[\macrod{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
disponibili alcune funzioni che consentono di superare una inconsistenza
presente negli standard con i file di grandi dimensioni, ed in particolare
definire le due funzioni \func{fseeko} e \func{ftello} che al contrario
delle corrispettive \func{fseek} e \func{ftell} usano il tipo di dato
- specifico \ctyp{off\_t} (vedi sez.~\ref{sec:file_io}).
+ specifico \type{off\_t} (vedi sez.~\ref{sec:file_io}).
-\item[\macro{\_LARGEFILE64\_SOURCE}] definendo questa macro si rendono
+\item[\macrod{\_LARGEFILE64\_SOURCE}] definendo questa macro si rendono
disponibili le funzioni di una interfaccia alternativa al supporto di valori
a 64 bit nelle funzioni di gestione dei file (non supportati in certi
sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di
- tipi di dato e funzioni (come \type{off64\_t} al posto di \type{off\_t} o
+ tipi di dato e funzioni (come \typed{off64\_t} al posto di \type{off\_t} o
\funcm{lseek64} al posto di \func{lseek}).
Le funzioni di questa interfaccia alternativa sono state proposte come una
di \texttt{64} consente di usare in maniera trasparente le funzioni
dell'interfaccia classica.
-\item[\macro{\_FILE\_OFFSET\_BITS}] la definizione di questa macro al valore
+\item[\macrod{\_FILE\_OFFSET\_BITS}] la definizione di questa macro al valore
di \texttt{64} consente di attivare la conversione automatica di tutti i
riferimenti a dati e funzioni a 32 bit nelle funzioni di interfaccia ai file
con le equivalenti a 64 bit, senza dover utilizzare esplicitamente
dimensioni. Su sistemi a 64 bit invece, dove il problema non sussiste, la
macro non ha nessun effetto.
-\item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
le estensioni delle funzioni di creazione, accesso e modifica di file e
directory che risolvono i problemi di sicurezza insiti nell'uso di
\textit{pathname} relativi con programmi \textit{multi-thread} illustrate in
sez.~\ref{sec:file_openat}.
-\item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
+\item[\macrod{\_REENTRANT}] definendo questa macro, o la equivalente
\macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
versioni rientranti (vedi sez.~\ref{sec:proc_reentrant}) di alcune funzioni,
necessarie quando si usano i \textit{thread}. Alcune di queste funzioni
disponibili soltanto su alcuni sistemi, o specifiche della \acr{glibc}, e
possono essere utilizzate una volta definita la macro.
-\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata
+\item[\macrod{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata
l'inserimento di alcuni controlli per alcune funzioni di allocazione e
manipolazione di memoria e stringhe che consentono di rilevare
automaticamente alcuni errori di \textit{buffer overflow} nell'uso delle