X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipc.tex;h=7bd296fa6bc6c29a8018f0af51491c6d7c39d42f;hp=25274c996d97179f9ed1a53057c3c64bc8100b1f;hb=adbc2a4478d606025705a406603e6097584b9fa0;hpb=de83478a4dec2c8dd1b3721c4548b8d902555566 diff --git a/ipc.tex b/ipc.tex index 25274c9..7bd296f 100644 --- a/ipc.tex +++ b/ipc.tex @@ -4509,8 +4509,8 @@ mappati in memoria; questi verranno cancellati automaticamente dal sistema solo con le rispettive chiamate a \func{close} e \func{munmap}. Una volta eseguita questa funzione però, qualora si richieda l'apertura di un segmento con lo stesso nome, la chiamata a \func{shm\_open} fallirà, a meno di non aver -usato \const{O\_CREAT}, nel qual caso comunque si otterrà il riferimento ad un -segmento distinto dal precedente. +usato \const{O\_CREAT}, in quest'ultimo caso comunque si otterrà un file +descriptor che fa riferimento ad un segmento distinto da eventuali precedenti. \begin{figure}[!htb] \footnotesize \centering @@ -4559,8 +4559,7 @@ void * FindShm(char * shm_name, off_t shm_size) /* Function RemoveShm: Remove a POSIX shared memory segment */ int RemoveShm(char * shm_name) { - shm_unlink(shm_name); - return 0; + return shm_unlink(shm_name); } \end{lstlisting} \end{minipage} @@ -4570,16 +4569,17 @@ int RemoveShm(char * shm_name) \label{fig:ipc_posix_shmmem} \end{figure} -Come esempio di queste funzioni vediamo come è possibile riscrivere con esse -funzioni analoghe a quelle viste in \secref{fig:ipc_sysv_shm_func}; il codice, -riportato in \figref{fig:ipc_posix_shmmem}, è sempre contenuto nel file -\file{SharedMem.c} dei sorgenti allegati. +Come esempio per l'uso di queste funzioni vediamo come è possibile riscrivere +una interfaccia semplificata analoga a quella vista in +\secref{fig:ipc_sysv_shm_func} per la memoria condivisa in stile SysV. Il +codice, riportato in \figref{fig:ipc_posix_shmmem}, è sempre contenuto nel +file \file{SharedMem.c} dei sorgenti allegati. La prima funzione (\texttt{\small 1--24}) è \func{CreateShm} che, dato un nome nell'argomento \var{name} crea un nuovo segmento di memoria condivisa, accessibile in lettura e scrittura, e ne restituisce l'indirizzo. Anzitutto si definiscono (\texttt{\small 8}) i flag per la successiva (\texttt{\small 9}) -chiamata a \func{shm\_open} che apre il segmento in lettura e scrittura +chiamata a \func{shm\_open}, che apre il segmento in lettura e scrittura (creandolo se non esiste, ed uscendo in caso contrario) assegnandogli sul filesystem i permessi specificati dall'argomento \var{perm}. In caso di errore (\texttt{\small 10--12}) si restituisce un puntatore nullo, altrimenti si @@ -4603,11 +4603,12 @@ memoria con \func{mmap}, restituendo (\texttt{\small 36--38}) un puntatore nullo in caso di errore, o l'indirizzo (\texttt{\small 39}) dello stesso in caso di successo. -La terza funzione (\texttt{\small 40--46}) è \func{FindShm}, e serve a +La terza funzione (\texttt{\small 40--45}) è \func{RemoveShm}, e serve a cancellare un segmento di memoria condivisa. Dato che al contrario di quanto avveniva con i segmenti del SysV IPC gli oggetti allocati nel kernel vengono rilasciati automaticamente quando nessuna li usa più, tutto quello che c'è da -fare (\texttt{\small 45}) in questo caso è chiamare \func{shm\_unlink}. +fare (\texttt{\small 44}) in questo caso è chiamare \func{shm\_unlink}, +retituendo al chiamante il valore di ritorno.