*/
/* Help printing routine */
void usage(void);
+void HandSigInt(int sig);
#define MSGMAXSIZE 256
+char *shmname = "messages";
+char *semname = "messages";
int main(int argc, char *argv[])
{
int i;
sem_t * sem;
- time_t t;
- char *shmname = "messages";
- char *semname = "messages";
- char * res;
void * shm_ptr;
+ time_t t;
/*
* Input section: decode command line parameters
* Use getopt function
printf("Wrong number of arguments %d\n", argc - optind);
usage();
}
+ Signal(SIGINT, HandSigInt);
// Get shared memory segment
- RemoveShm(shmname);
shm_ptr = CreateShm(shmname, MSGMAXSIZE, 0666, 0);
if ( shm_ptr == NULL) {
perror("Cannot find shared memory");
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) {
printf(" -s semname use semname semaphore\n");
exit(1);
}
+
+void HandSigInt(int sig)
+{
+ RemoveShm(shmname);
+ sem_unlink(semname);
+ exit(0);
+}