Inizio descrizione programma di monitoraggio del messaggio su memoria
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 30 Dec 2010 23:22:22 +0000 (23:22 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 30 Dec 2010 23:22:22 +0000 (23:22 +0000)
condivisa.

ipc.tex
sources/message_getter.c

diff --git a/ipc.tex b/ipc.tex
index 172ea58b1bf6e130f37bde8a4da074040c5d4720..69286e92a16ed2d0925c76840628c03c7735465d 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -4360,6 +4360,47 @@ Si tenga presente infine che utilizzare un semaforo che 
 caso ci si trovi in una tale evenienza occorre reinizializzare il semaforo una
 seconda volta con \func{sem\_init}.
 
+Come esempio di uso sia della memoria condivisa che dei semafori POSIX si sono
+scritti due semplici programmi con i quali è possibile rispettivamente
+monitorare il contenuto di un segmento di memoria condivisa e modificarne il
+contenuto. 
+
+\begin{figure}[!h]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includecodesample{listati/message_getter.c}
+  \end{minipage} 
+  \normalsize 
+  \caption{Sezione principale del codice del programma
+    \file{message\_getter.c}.}
+  \label{fig:ipc_posix_sem_shm_message_server}
+\end{figure}
+
+Il corpo principale del primo dei due, il cui codice completo è nel file
+\file{message\_getter.c} dei sorgenti allegati, è riportato in
+fig.~\ref{fig:ipc_posix_sem_shm_message_server}; si è tralasciata la parte che
+tratta la gestione delle opzioni a riga di comando (che consentono di
+impostare un nome diverso per il semaforo e il segmento di memoria condivisa)
+ed il controllo che al programma venga fornito almeno un argomento, contenente
+la stringa iniziale da inserire nel segmento di memoria condivisa.
+
+Lo scopo del programma è quello di creare un segmento di memoria condivisa su
+cui registrare una stringa, e tenerlo sotto osservazione stampando la stessa
+una volta al secondo. Si utilizzerà un semaforo per proteggere l'accesso in
+lettura alla stringa, in modo che questa non possa essere modificata
+dall'altro programma prima di averla finita di stampare.
+
+La parte iniziale del programma contiene le definizioni (\texttt{\small 1--8})
+del gestore del segnale usato per liberare le risorse utilizzate, delle
+variabili globali contenenti i nomi di default del segmento di memoria
+condivisa e del semaforo, e delle altre variabili utilizzate dal programma.
+
+Come prima istruzione (\texttt{\small 10}) si è provveduto ad installare un
+gestore di segnale che consentirà di effettuare le operazioni di pulizia, dopo
+di che 
+
+
+
 
 % LocalWords:  like fifo System POSIX RPC Calls Common Object Request Brocker
 % LocalWords:  Architecture descriptor kernel unistd int filedes errno EMFILE
index e1aff0cdacc27f0d3bdfe45bde0232ce698b82bd..5ffba091b1a1c1a2b4910b026bc0194e70cb9fda 100644 (file)
@@ -51,9 +51,8 @@ int main(int argc, char *argv[])
 {
     int i;
     sem_t * sem;
-    time_t t;
-    char * res;
     void * shm_ptr;
+    time_t t;
     /*
      * Input section: decode command line parameters 
      * Use getopt function
@@ -111,14 +110,13 @@ int main(int argc, char *argv[])
     if ( sem_getvalue(sem, &i) != 0) {
        perror("cannot get initial semaphore value");
        exit(1);
-    } else {
-       if (i == 0) {
+    } else 
+       if (i == 0)
            if ( sem_post(sem) != 0) {
                perror("cannot do semaphore initial release");
                exit(1);
            }
-       }
-    }   
+    // main loop
     while(1) {
        // acquire semaphore
        if ( sem_wait(sem) != 0) {