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; }
int main(int argc, char *argv[]) { int procnum = 10; int loopnum = 100; int i = 0, j = 0; printf("please enter child process number:\n"); scanf("%d", &procnum); printf("please enter child process test number:\n"); scanf("%d", &loopnum); //create shm int ret = 0; int shmhdl = 0; ret = IPC_CreateShm(".", sizeof(int), &shmhdl); if (ret != 0) { printf("fun IPC_CreatShm() error:%d.\n", ret); return ret; } //create sem int semid = 0; ret = sem_creat(g_key, &semid); if (ret != 0) { if (ret == SEMERR_EEXIST) { ret = sem_open(g_key, &semid); if (ret != 0) { printf("fun sem_open() error, %d.\n", ret); return ret; } } else { return ret; } } int val = 0; ret = sem_getval(semid, &val); if (ret != 0) { printf("func sem_getval() err:%d.\n", ret); return ret; } printf("sem val is %d.\n", val); // pid_t pid; // for (i = 0; i < procnum; i++) { // pid = fork(); // if (pid == 0) { // for (j = 0; j < loopnum; ++j) { // TestFunc(loopnum); // } // exit(0); // } // } // int childpid = 0; // while ((childpid = waitpid(-1, NULL, 0)) > 0) { // ; // } pthread_t tidarr[200]; for (; i < procnum; ++i) { pthread_create(&tidarr[i], NULL, thread_routine, NULL); } for (i = 0; i < procnum; ++i) { pthread_join(tidarr[i], NULL); } printf("parent process exit.\n"); return 0; }