Risistemati ed insiriti nella relativa sezione gli esempi di uso dei
[gapil.git] / listati / message_setter.c
diff --git a/listati/message_setter.c b/listati/message_setter.c
new file mode 100644 (file)
index 0000000..1094e39
--- /dev/null
@@ -0,0 +1,34 @@
+#define MSGMAXSIZE 256
+
+int main(int argc, char *argv[]) 
+{
+    int t = 0, sem_t * sem, void *shm_ptr;
+    char *shmname = "messages";
+    char *semname = "messages";
+    ...
+    // get shared memory segment
+    shm_ptr = FindShm(shmname, MSGMAXSIZE);
+    if ( shm_ptr == NULL) {
+       perror("Cannot find shared memory");
+       exit(1);
+    }
+    // open semaphore
+    if ( (sem = sem_open(semname, 0)) == SEM_FAILED ) {
+       perror("Cannot open semaphore");
+       exit(1);
+    }
+    // get semaphore
+    if ( sem_wait(sem) != 0) {
+       perror("cannot use semaphore");
+       exit(1);
+    }
+    strncpy((char *) shm_ptr, argv[optind],  MSGMAXSIZE); // modify message 
+    printf("Sleeping for %i seconds\n", t);               // print wait time
+    sleep(t);                                             // sleep
+    // release semaphore
+    if ( sem_post(sem) != 0) {
+       perror("cannot release semaphore");
+       exit(1);
+    }
+    exit(0);
+}