From cea0c7d2a609e9de68fef7bb114e2d4c0a95f70e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 11 Mar 2009 08:04:49 +0000 Subject: [PATCH] Materiale su memaling e affini, tempi dei file ed altro --- filedir.tex | 18 ++++++++++++++---- fileunix.tex | 12 ++++++------ process.tex | 26 +++++++++++++++++++++----- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/filedir.tex b/filedir.tex index 8bb46d7..b15c5f0 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1541,9 +1541,10 @@ su un file, su un link simbolico e su un file descriptor. La struttura \struct{stat} usata da queste funzioni è definita nell'header \file{sys/stat.h} e in generale dipende dall'implementazione; la versione usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come -riportata dalla pagina di manuale di \func{stat} (in realtà la definizione +riportata dalla pagina di manuale di \func{stat}; in realtà la definizione effettivamente usata nel kernel dipende dall'architettura e ha altri campi -riservati per estensioni come tempi più precisi, o per il padding dei campi). +riservati per estensioni come tempi dei file più precisi (vedi +sez.~\ref{sec:file_file_times}), o per il padding dei campi. \begin{figure}[!htb] \footnotesize @@ -1561,8 +1562,6 @@ Si noti come i vari membri della struttura siano specificati come tipi primitivi del sistema (di quelli definiti in tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}). -% TODO: aggiornare con i cambiamenti ai tempi fatti con il 2.6 - \subsection{I tipi di file} \label{sec:file_types} @@ -1940,6 +1939,17 @@ file di dispositivo, scrivendo direttamente sul disco senza passare attraverso il filesystem, ma ovviamente in questo modo la cosa è molto più complicata da realizzare. +Infine a partire dal kernel 2.6 la risoluzione dei tempi dei file, che nei +campi di tab.~\ref{tab:file_file_times} è espressa in secondi, è stata +portata ai nanosecondi per la gran parte dei filesystem. La ulteriore +informazione può essere acceduta attraverso altri campi; se si sono definite +le macro \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE} questi sono +\var{st\_atim.tv\_nsec}, \var{st\_mtim.tv\_nsec} e \var{st\_ctim.tv\_nsec} se +queste non sono definite, \var{st\_atimensec}, \var{st\_mtimensec} e +\var{st\_mtimensec}. Qualora il supporto per questa maggior precisione sia +assente questi campi aggiuntivi saranno nulli. + +%TODO documentare utimes \section{Il controllo di accesso ai file} diff --git a/fileunix.tex b/fileunix.tex index 21d0e59..c9712a7 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1140,15 +1140,15 @@ l'argomento \param{dirfd}.\footnote{non staremo pertanto a riportarli uno per \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} \\ diff --git a/process.tex b/process.tex index c332e5c..4286f3f 100644 --- a/process.tex +++ b/process.tex @@ -1035,7 +1035,8 @@ Le funzioni restituiscono il puntatore al buffer di memoria allocata, che per \func{memalign} sarà un multiplo di \param{boundary} mentre per \func{valloc} un multiplo della dimensione di una pagina di memoria. Nel caso della versione fornita dalle \acr{glibc} la memoria allocata con queste funzioni deve essere -liberata con \func{free}. +liberata con \func{free}, cosa che non è detto accada con altre +implementazioni. Nessuna delle due funzioni ha una chiara standardizzazione (nessuna delle due compare in POSIX.1), ed inoltre ci sono indicazione discordi sui file che ne @@ -1046,14 +1047,29 @@ contengono la definizione;\footnote{secondo SUSv2 \func{valloc} per questo motivo il loro uso è sconsigliato, essendo state sostituite dalla nuova \funcd{posix\_memalign}, che è stata standardizzata in POSIX.1d; il suo prototipo è: +\begin{prototype}{stdlib.h}{posix\_memalign(void **memptr, size\_t alignment, + size\_t size) } + Alloca un buffer di memoria allineato ad un multiplo di \param{alignment}. + + \bodydesc{La funzione restituisce 0 in caso di successo e \val{NULL} in caso + di fallimento, o uno dei due codici di errore \errcode{ENOMEM} o + \errcode{EINVAL}; \var{errno} non viene impostata.} +\end{prototype} + +La funzione restituisce il puntatore al buffer allocato all'indirizzo indicato +da \param{memptr}. La funzione fallisce nelle stesse condizioni delle due +funzioni precedenti, ma a differenza di \func{memalign} restituisce un codice +di errore \errcode{EINVAL} anche se \param{alignment} non è un multiplo della +la dimensione di \code{sizeof(void *)}. Come per le precedenti la memoria +allocata con \func{posix\_memalign} può essere disallocata con +\func{free}.\footnote{che in caso questo caso è quanto richiesto dallo + standard.} +% TODO: trattare le funzionalità avanzate di \func{malloc} + % TODO documentare \func{madvise} % TODO documentare \func{mincore} -% TODO: trattare le funzionalità avanzate di \func{malloc} -% TODO: trattare \func{memalign} -% TODO: trattare \func{valloc} -% TODO: trattare \func{posix\_memalign} -- 2.30.2