X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=listati%2Fmessage_getter.c;fp=listati%2Fmessage_getter.c;h=4b19bef3018ac30abf7b270aaf8f534055c34cc6;hp=0000000000000000000000000000000000000000;hb=9fc37da8fe691ce7ca6222773aace47c5edef3d1;hpb=5b56553e2294af812321ffaea6b296d2ad068f41 diff --git a/listati/message_getter.c b/listati/message_getter.c new file mode 100644 index 0000000..4b19bef --- /dev/null +++ b/listati/message_getter.c @@ -0,0 +1,49 @@ +void HandSigInt(int sig); +#define MSGMAXSIZE 256 +char *shmname = "messages"; +char *semname = "messages"; + +int main(int argc, char *argv[]) +{ + sem_t * sem, void * shm_ptr, time_t t; + ... + Signal(SIGINT, HandSigInt); + // get a shared memory segment + if ((shm_ptr = CreateShm(shmname, MSGMAXSIZE, 0666, 0)) == NULL) { + perror("Cannot find shared memory"); + exit(1); + } + // get a locked semaphore + if ((sem = sem_open(semname, O_CREAT|O_EXCL, 0666, 0)) == SEM_FAILED) { + perror("Cannot open semaphore"); + exit(1); + } + // set initial string + strncpy((char *) shm_ptr, argv[optind], MSGMAXSIZE); + // do initial release + if (sem_post(sem) != 0) { + perror("cannot do semaphore initial release"); + exit(1); + } + // main loop + while(1) { + if (sem_getvalue(sem, &i) !=0) { // get sem values + perror("cannot get semaphore value"); + exit(1); + } + printf("sem=%i, ", i); // print sem values + t = time(NULL); // get time + printf("%s", ctime(&t)); // print time + if (sem_wait(sem) != 0) { // acquire semaphore + perror("cannot use semaphore"); + exit(1); + } + printf("message: %s\n", (char *) shm_ptr ); // print message + if (sem_post(sem) != 0) { // release semaphore + perror("cannot release semaphore"); + exit(1); + } + sleep(1); + } +exit(0); +}