From: Simone Piccardi Date: Thu, 30 Dec 2010 23:22:22 +0000 (+0000) Subject: Inizio descrizione programma di monitoraggio del messaggio su memoria X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=5b56553e2294af812321ffaea6b296d2ad068f41 Inizio descrizione programma di monitoraggio del messaggio su memoria condivisa. --- diff --git a/ipc.tex b/ipc.tex index 172ea58..69286e9 100644 --- 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 diff --git a/sources/message_getter.c b/sources/message_getter.c index e1aff0c..5ffba09 100644 --- a/sources/message_getter.c +++ b/sources/message_getter.c @@ -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) {