int main(int argc, char *argv[]) { int opt; opt = getopt(argc, argv, "cdpvs:gfm:"); if (opt == '?') exit(EXIT_FAILURE); if (opt == -1) { usage(); exit(EXIT_FAILURE); } key_t key = ftok(".", 's'); int semid; switch (opt) { case 'c': sem_create(key); break; case 'p': semid = sem_open(key); sem_p(semid); sem_getval(semid); break; case 'v': semid = sem_open(key); sem_v(semid); sem_getval(semid); break; case 'd': semid = sem_open(key); sem_d(semid); break; case 's': semid = sem_open(key); sem_setval(semid, atoi(optarg)); break; case 'g': semid = sem_open(key); sem_getval(semid); break; case 'f': semid = sem_open(key); sem_getmode(semid); break; case 'm': semid = sem_open(key); sem_setmode(semid, argv[2]); break; } return 0; }
int main(int argc, char *argv[]) { //int semid = sem_create(0x1111); int semid = sem_open(0x1111); if (semid < 0) { perror("sem_open error"); return -1; } int ret = 0; ret = sem_setval(semid, 1); if (ret < 0) { perror("sem_setval error"); return -1; } int val = 0; ret = sem_getval(semid, &val); if (ret < 0) { perror("sem_getval error"); return -1; } // printf("val is %d.\n", val); fork(); if ((ret = sem_p(semid)) < 0) { perror("sem_p error"); return -1; } int i = 0; printf("i %d, pid %d.\n", ++i, getpid()); sleep(3); printf("i %d, pid %d.\n", ++i, getpid()); // printf("pid %d, p - v.\n", getpid()); // ret = sem_getval(semid, &val); // printf("val is %d.\n", val); if ((ret = sem_v(semid)) < 0) { perror("sem_p error"); return -1; } ret = sem_getval(semid, &val); // printf("val is %d.\n", val); return ret; }