Questi permessi vengono usati in maniera diversa dalle varie funzioni, e a
seconda che si riferiscano a file, link simbolici o directory, qui ci
Questi permessi vengono usati in maniera diversa dalle varie funzioni, e a
seconda che si riferiscano a file, link simbolici o directory, qui ci
La prima regola è che per poter accedere ad un file attraverso il suo pathname
occorre il permesso di esecuzione in ciascuna delle directory che compongono
La prima regola è che per poter accedere ad un file attraverso il suo pathname
occorre il permesso di esecuzione in ciascuna delle directory che compongono
l'utente e il gruppo a cui il file appartiene (i valori di \var{st\_uid} e
\var{st\_gid} accennati in precedenza) e l'\textit{effective user id},
l'\textit{effective group id} e gli eventuali \textit{supplementary group id}
l'utente e il gruppo a cui il file appartiene (i valori di \var{st\_uid} e
\var{st\_gid} accennati in precedenza) e l'\textit{effective user id},
l'\textit{effective group id} e gli eventuali \textit{supplementary group id}
+del processo\footnote{in realtà Linux per quanto riguarda l'accesso ai file
+ utilizza al posto degli \textit{effective id} i \textit{filesystem id} (si
+ veda \secref{sec:proc_perms}), ma essendo questi del tutto equivalenti ai
+ primi, eccetto il caso in cui si voglia scrivere un server NFS, ignoreremo
+ questa differenza}.
Per una spiegazione dettagliata degli identificatori associati ai processi si
veda \secref{sec:proc_perms}; normalmente, a parte quanto vedremo in
Per una spiegazione dettagliata degli identificatori associati ai processi si
veda \secref{sec:proc_perms}; normalmente, a parte quanto vedremo in
informazioni relative al controllo di accesso, sono mantenute nell'inode.
Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
informazioni relative al controllo di accesso, sono mantenute nell'inode.
Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
memorizzati nell'inode; esamineremo poi le varie funzioni usate per manipolare
tutte queste informazioni (eccetto quelle che riguardano la gestione del
memorizzati nell'inode; esamineremo poi le varie funzioni usate per manipolare
tutte queste informazioni (eccetto quelle che riguardano la gestione del
generale dipende dall'implementazione, la versione usata da Linux è mostrata
in \nfig, così come riportata dalla man page (in realtà la definizione
effettivamente usata nel kernel dipende dall'architettura e ha altri campi
generale dipende dall'implementazione, la versione usata da Linux è mostrata
in \nfig, così come riportata dalla man page (in realtà la definizione
effettivamente usata nel kernel dipende dall'architettura e ha altri campi
Si noti come i vari membri della struttura siano specificati come tipi nativi
del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in
Si noti come i vari membri della struttura siano specificati come tipi nativi
del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in
Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e
alle directory esistono vari altri oggetti che possono stare su un filesystem;
Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e
alle directory esistono vari altri oggetti che possono stare su un filesystem;
(che è quello che contiene anche le informazioni relative ai permessi).
Dato che il valore numerico può variare a seconda delle implementazioni, lo
standard POSIX definisce un insieme di macro per verificare il tipo di files,
queste vengono usate anche da Linux che supporta pure le estensioni per link
(che è quello che contiene anche le informazioni relative ai permessi).
Dato che il valore numerico può variare a seconda delle implementazioni, lo
standard POSIX definisce un insieme di macro per verificare il tipo di files,
queste vengono usate anche da Linux che supporta pure le estensioni per link
La funzione restituisce zero in caso di successo e -1 in caso di errore, nel
qual caso \var{errno} è settata opportunamente.
\begin{errlist}
La funzione restituisce zero in caso di successo e -1 in caso di errore, nel
qual caso \var{errno} è settata opportunamente.
\begin{errlist}
-\item \texttt{EACCESS} non si ha il permesso di scrittura sul file.
-\item \texttt{ENOENT} \var{filename} non esiste.
+\item \macro{EACCESS} non si ha il permesso di scrittura sul file.
+\item \macro{ENOENT} \var{filename} non esiste.
-Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like
-i file hanno delle caratteristiche specifiche dipendenti dall'architettura del
+Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like i
+file hanno delle caratteristiche specifiche dipendenti dall'architettura del
altrettante diverse associazioni allo stesso inode; si noti poi che nessuno di
questi nomi viene ad assumere una particolare preferenza rispetto agli altri.
altrettante diverse associazioni allo stesso inode; si noti poi che nessuno di
questi nomi viene ad assumere una particolare preferenza rispetto agli altri.
suole chiamare questo tipo di associazione un collegamento diretto (o
\textit{hard link}). Il prototipo della funzione e le sue caratteristiche
principali, come risultano dalla man page, sono le seguenti:
\begin{prototype}{unistd.h}
{int link(const char * oldpath, const char * newpath)}
suole chiamare questo tipo di associazione un collegamento diretto (o
\textit{hard link}). Il prototipo della funzione e le sue caratteristiche
principali, come risultano dalla man page, sono le seguenti:
\begin{prototype}{unistd.h}
{int link(const char * oldpath, const char * newpath)}
- Crea un nuovo collegamento diretto al file indicato da \texttt{oldpath}
- dandogli nome \texttt{newpath}.
+ Crea un nuovo collegamento diretto al file indicato da \var{oldpath}
+ dandogli nome \var{newpath}.
- \item \texttt{EPERM} il filesystem che contiene \texttt{oldpath} e
- \texttt{newpath} non supporta i link diretti o è una directory.
- \item \texttt{EEXIST} un file (o una directory) con quel nome esiste di
+ \item \macro{EPERM} il filesystem che contiene \var{oldpath} e
+ \macro{newpath} non supporta i link diretti o è una directory.
+ \item \macro{EEXIST} un file (o una directory) con quel nome esiste di
- \item \texttt{EMLINK} ci sono troppi link al file \texttt{oldpath} (il
- numero massimo è specificato dalla variabile \texttt{LINK\_MAX}, vedi
+ \item \macro{EMLINK} ci sono troppi link al file \vat{oldpath} (il
+ numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
Per quanto dicevamo in \secref{sec:file_filesystem} la creazione del
collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
filesystem; inoltre il filesystem deve supportare i collegamenti diretti (non è
Per quanto dicevamo in \secref{sec:file_filesystem} la creazione del
collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
filesystem; inoltre il filesystem deve supportare i collegamenti diretti (non è
La funzione opera sui file ordinari, come sugli altri oggetti del filesystem,
in alcuni filesystem solo l'amministratore è in grado di creare un
collegamento diretto ad un'altra directory, questo lo si fa perché in questo
caso è possibile creare dei circoli nel filesystem (vedi
La funzione opera sui file ordinari, come sugli altri oggetti del filesystem,
in alcuni filesystem solo l'amministratore è in grado di creare un
collegamento diretto ad un'altra directory, questo lo si fa perché in questo
caso è possibile creare dei circoli nel filesystem (vedi
-\secref{sec:file_symlink}) che molti programmi 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); data la sua
+\secref{sec:file_symlink}) che molti programmi non sono in grado di gestire e
+la cui rimozione diventerebbe estremamente complicata (in genere occorre far
+girare il programma \cmd{fsck} per riparare il filesystem); data la sua
\begin{prototype}{unistd.h}{int unlink(const char * pathname)}
Cancella il nome specificato dal pathname nella relativa directory e
\begin{prototype}{unistd.h}{int unlink(const char * pathname)}
Cancella il nome specificato dal pathname nella relativa directory e
qual caso il file non viene toccato. La variabile \texttt{errno} viene
settata secondo i seguenti codici di errore:
\begin{errlist}
qual caso il file non viene toccato. La variabile \texttt{errno} viene
settata secondo i seguenti codici di errore:
\begin{errlist}
- \texttt{unlink} con le directory, e non conforme allo standard POSIX, che
- prescrive invece l'uso di \texttt{EPERM} in caso l'operazione non sia
+ \var{unlink} con le directory, e non conforme allo standard POSIX, che
+ prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia
consentita o il processo non abbia privilegi sufficienti).
\item \texttt{EROFS} \var{pathname} è su un filesystem montato in sola
lettura.
consentita o il processo non abbia privilegi sufficienti).
\item \texttt{EROFS} \var{pathname} è su un filesystem montato in sola
lettura.