/* * semopup.c * Increments a semaphore. */ #include #include #include #include #include #include #include #include int main(int argc, char **argv) { key_t key; struct sembuf sops[1]; int semid; if(argc!=2) { fprintf(stdout,"usage: %s \n",argv[0]); fflush(stdout); return -1; } sops[0].sem_num=0; sops[0].sem_op=atoi(argv[1]); sops[0].sem_flg=0; if(sops[0].sem_op<=0) { fprintf(stdout,"please enter a positive # to increment the semaphore by\n"); fflush(stdout); return -1; } if((key=ftok("semfile",'a'))==-1) { fprintf(stdout,"failed to get key %s\n",strerror(errno)); fflush(stdout); return -1; } fprintf(stdout,"%x \n",key); if((semid=semget(key,1,S_IRUSR | S_IWUSR))==-1) /* get the semaphore */ { fprintf(stdout,"semget failed %s\n",strerror(errno)); fflush(stdout); return -1; } if(semop(semid,sops,1)!=0) /* incrememnt the semaphore */ { fprintf(stdout,"semop failed %s\n",strerror(errno)); fflush(stdout); return -1; } fprintf(stdout,"semaphore incremented by %d\n",sops[0].sem_op); fflush(stdout); return 0; }