diff --git a/TMP/Practice/04.10/output/semget b/TMP/Practice/04.10/output/semget new file mode 100755 index 0000000..bac4751 Binary files /dev/null and b/TMP/Practice/04.10/output/semget differ diff --git a/TMP/Practice/04.10/semget.c b/TMP/Practice/04.10/semget.c new file mode 100644 index 0000000..c5c71c4 --- /dev/null +++ b/TMP/Practice/04.10/semget.c @@ -0,0 +1,52 @@ + #include + #include + #include + #include + #include + + static void + usage(const char *pname) + { + fprintf(stderr, "Usage: %s [-cx] pathname proj-id num-sems\n", + pname); + fprintf(stderr, " -c Use IPC_CREAT flag\n"); + fprintf(stderr, " -x Use IPC_EXCL flag\n"); + exit(EXIT_FAILURE); + } + + int + main(int argc, char *argv[]) + { + int semid, nsems, flags, opt; + key_t key; + + flags = 0; + while ((opt = getopt(argc, argv, "cx")) != -1) { + switch (opt) { + case 'c': flags |= IPC_CREAT; break; + case 'x': flags |= IPC_EXCL; break; + default: usage(argv[0]); + } + } + + if (argc != optind + 3) + usage(argv[0]); + + key = ftok(argv[optind], argv[optind + 1][0]); + if (key == -1) { + perror("ftok"); + exit(EXIT_FAILURE); + } + + nsems = atoi(argv[optind + 2]); + + semid = semget(key, nsems, flags | 0600); + if (semid == -1) { + perror("semget"); + exit(EXIT_FAILURE); + } + + printf("ID = %d\n", semid); + + exit(EXIT_SUCCESS); + }