di interfaccia già descritte in sez.~\ref{sec:ipc_sysv_sem}, anche un mutex,
che utilizzeremo per regolare l'accesso alla memoria condivisa.
-\begin{figure}[!htbp]
- \footnotesize \centering
- \begin{minipage}[c]{\codesamplewidth}
- \includecodesample{listati/ComputeValues.c}
- \end{minipage}
- \normalsize
- \caption{Codice delle funzioni ausiliarie usate da \file{DirMonitor.c}.}
- \label{fig:ipc_dirmonitor_sub}
-\end{figure}
-
Completata l'inizializzazione e la creazione degli oggetti di
intercomunicazione il programma entra nel ciclo principale (\texttt{\small
40--49}) dove vengono eseguite indefinitamente le attività di monitoraggio.
effettuare la scansione delle voci della directory, chiamando per ciascuna di
esse la funzione \func{ComputeValues}, che esegue tutti i calcoli necessari.
+\begin{figure}[!htbp]
+ \footnotesize \centering
+ \begin{minipage}[c]{\codesamplewidth}
+ \includecodesample{listati/ComputeValues.c}
+ \end{minipage}
+ \normalsize
+ \caption{Codice delle funzioni ausiliarie usate da \file{DirMonitor.c}.}
+ \label{fig:ipc_dirmonitor_sub}
+\end{figure}
+
+
Il codice di quest'ultima è riportato in fig.~\ref{fig:ipc_dirmonitor_sub}.
Come si vede la funzione (\texttt{\small 2--16}) è molto semplice e si limita
a chiamare (\texttt{\small 5}) la funzione \func{stat} sul file indicato da
può facilmente verificare con il comando \cmd{strace}, sia per la memoria
condivisa che per le code di messaggi varie \textit{system call} utilizzate da
Linux corrispondono in realtà a quelle ordinarie dei file, essendo detti
-oggetti realizzati come tali in appositi filesystem.
+oggetti realizzati come tali usando degli specifici filesystem.
In particolare i permessi associati agli oggetti di IPC POSIX sono identici ai
permessi dei file, ed il controllo di accesso segue esattamente la stessa
\fhead{mqueue.h}
\fhead{time.h}
\fdecl{int mq\_timedsend(mqd\_t mqdes, const char *msg\_ptr, size\_t
- msg\_len, unsigned int msg\_prio,\\
-\phantom{int mq\_timedsend(}const struct timespec *abs\_timeout)}
+ msg\_len, \\
+\phantom{int mq\_timedsend(}unsigned int msg\_prio, const struct timespec *abs\_timeout)}
\fdesc{Esegue l'inserimento di un messaggio su una coda entro un tempo
specificato}
}
da \param{mode} (di cui vengono usati solo i 9 bit meno significativi, non si
applicano pertanto i permessi speciali di sez.~\ref{sec:file_special_perm})
filtrati dal valore dell'\textit{umask} del processo. Come gruppo ed utente
-propritario del segmento saranno presi quelli facenti parte del gruppo
+proprietario del segmento saranno presi quelli facenti parte del gruppo
\textit{effective} del processo chiamante.
Dato che un segmento di lunghezza nulla è di scarsa utilità, una vola che lo
-si è creato per impostarne la dimensione si devrà poi usare \func{ftruncate}
+si è creato per impostarne la dimensione si dovrà poi usare \func{ftruncate}
(vedi sez.~\ref{sec:file_file_size}) prima di mapparlo in memoria con
\func{mmap}. Si tenga presente che una volta chiamata \func{mmap} si può
chiudere il file descriptor ad esso associato (semplicemente con
condivisa POSIX, vediamo come è possibile riscrivere una interfaccia
semplificata analoga a quella vista in fig.~\ref{fig:ipc_sysv_shm_func} per la
memoria condivisa in stile SysV. Il codice completo, di cui si sono riportate
-le parti esseziali in fig.~\ref{fig:ipc_posix_shmmem}, è contenuto nel file
+le parti essenziali in fig.~\ref{fig:ipc_posix_shmmem}, è contenuto nel file
\file{SharedMem.c} dei sorgenti allegati.
\begin{figure}[!htb]
stesso semaforo. Questo deve essere specificato nella stessa forma utilizzata
per i segmenti di memoria condivisa, con un nome che inizia con ``\texttt{/}''
e senza ulteriori ``\texttt{/}'', vale a dire nella forma
-\texttt{/nomesemaforo}.
+\texttt{/nome-semaforo}.
Con Linux i file associati ai semafori sono mantenuti nel filesystem virtuale
\texttt{/dev/shm}, e gli viene assegnato automaticamente un nome nella forma
-\texttt{sem.nomesemaforo}, si ha cioè una corrispondenza per cui
-\texttt{/nomesemaforo} viene rimappato, nella creazione tramite
-\func{sem\_open}, su \texttt{/dev/shm/sem.nomesemaforo}. Per questo motivo la
+\texttt{sem.nome-semaforo}, si ha cioè una corrispondenza per cui
+\texttt{/nome-semaforo} viene rimappato, nella creazione tramite
+\func{sem\_open}, su \texttt{/dev/shm/sem.nome-semaforo}. Per questo motivo la
dimensione massima per il nome di un semaforo, a differenza di quanto avviene
-per i segmenti di memoria confivisa, è pari a \const{NAME\_MAX}$ - 4$.
+per i segmenti di memoria condivisa, è pari a \const{NAME\_MAX}$ - 4$.
L'argomento \param{oflag} è quello che controlla le modalità con cui opera la
funzione, ed è passato come maschera binaria; i bit corrispondono a quelli
Si tenga presente che la funzione può sempre essere interrotta da un segnale,
nel qual caso si avrà un errore di \const{EINTR}; inoltre questo avverrà
-comunque, anche qualora si fosse richiesta la gesione con la semantica BSD,
+comunque, anche qualora si fosse richiesta la gestione con la semantica BSD,
installando il gestore del suddetto segnale con l'opzione \const{SA\_RESTART}
(vedi sez.~\ref{sec:sig_sigaction}) per riavviare le \textit{system call}
interrotte.
\func{sem\_wait}, ma è possibile impostare un tempo limite per l'attesa
tramite la struttura \struct{timespec} (vedi
fig.~\ref{fig:sys_timespec_struct}) puntata
-dall'argomento \param{abs\_timeout}, indicato in secondi e nonosecondi a
+dall'argomento \param{abs\_timeout}, indicato in secondi e nanosecondi a
partire dalla cosiddetta \textit{Epoch} (00:00:00, 1 January 1970
UTC). Scaduto il limite la funzione ritorna anche se non è possibile acquisire
il semaforo fallendo con un errore di \errval{ETIMEDOUT}.
% LocalWords: Larry Wall Escape the Hell William ipctestid Identifier segment
% LocalWords: violation dell'I SIGINT setter Fri Dec Sleeping seconds ECHILD
% LocalWords: SysV capability short RESOURCE INFO UNDEFINED EFBIG semtimedop
-% LocalWords: scan HUGETLB huge page NORESERVE copy RLIMIT MEMLOCK REMAP
-% LocalWords: readmon Hierarchy defaults queues MSGQUEUE
+% LocalWords: scan HUGETLB huge page NORESERVE copy RLIMIT MEMLOCK REMAP UTC
+% LocalWords: readmon Hierarchy defaults queues MSGQUEUE effective fstat
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+% LocalWords: fchown fchmod Epoch January