JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... mnum , int cmd , ...); 説明 semctl () は、 semid で指定された System V セマフォ集合 (semaphore set) またはセマフォ集合の semnun 番目のセマフォに対して、 cmd ... s { struct ipc_perm sem_perm; /* 所有権と許可 */ time_t sem_otime; /* 最後の semop の時刻 */ time_t sem_ctime; /* 作成時刻/semctl() により 最後に変更が行われた時刻 */ unsigned long sem_nsems; /* 集合内のセマフォの数 */ }; The fields of the semid_ds str ... e semaphore set. sem_otime Time of last semop (2) system call. sem_ctime Time of creation of semaphore set or time of last semctl () IPCSET , SETVAL , or SETALL operation. sem_nsems Number of semaphores in the set. Each semaphore of the set is referenc ... ... 合を作成する際、 semget () はセマフォ集合の情報を保持するデータ構造体 semid_ds を次のように初期化する ( semid_ds については semctl (2) を参照): • sem_perm.cuid と sem_perm.uid に、呼び出し元のプロセスの実効 (effective) ユーザー ID を設定する。 • sem_per ... したアプリケーションではこの動作を前提にすべきではない。 アプリケーションは明示的にセマフォを希望の値で初期化すべきである。 semctl (2) の SETVAL か SETALL 操作を使って初期化することができる。 複数箇所からセマフォ集合の操作が行われる場面では、 誰が最初に ... 集合を初期化すればよいか分からない。 この状況を避けるには、 semctl (2) の IPC_STAT 操作で取得できるセマフォのデータ構造体の sem_otime が 0 以外になっているかをチェックすればよい。 セマフォの ... ... のアーキテクチャー---for 例えば x86-64 や ARM---では、システムコール ipc () が存在しない。実際には、その代わりに msgctl (2), semctl (2), shmctl (2) などが独立したシステムコールとして実装されている。 関連項目 msgctl (2), msgget (2), msgrcv (2), msgsnd (2) ... , semctl (2), semget (2), semop (2), semtimedop (2), shmat (2), shmctl (2), shmdt (2), shmget (2), sysvipc (7) この文書について この ... ... de < string.h > #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) union semun { /* Used in calls to semctl() */ int val; struct semid_ds * buf; unsigned short * array; #if defined(__linux__) struct seminfo * __buf; #endif }; #def ... SHM_RDONLY); if (addr == (void *) -1) errExit("shmat"); /* Initialize semaphore 0 in set with value 1 */ arg.val = 1; if (semctl(semid, 0, SETVAL, arg) == -1) errExit("semctl"); printf("shmid = %d; semid = %d\n", shmid, semid); /* Wait for semaphore v ... %s\n", addr); /* Remove shared memory and semaphore set */ if (shmctl(shmid, IPC_RMID, NULL) == -1) errExit("shmctl"); if (semctl(semid, 0, IPC_RMID, dummy) == -1) errExit("semctl"); exit(EXIT_SUCCESS); } プログラムのソース: svshm_string_write.c The wr ... ... de < string.h > #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) union semun { /* Used in calls to semctl() */ int val; struct semid_ds * buf; unsigned short * array; #if defined(__linux__) struct seminfo * __buf; #endif }; #def ... SHM_RDONLY); if (addr == (void *) -1) errExit("shmat"); /* Initialize semaphore 0 in set with value 1 */ arg.val = 1; if (semctl(semid, 0, SETVAL, arg) == -1) errExit("semctl"); printf("shmid = %d; semid = %d\n", shmid, semid); /* Wait for semaphore v ... %s\n", addr); /* Remove shared memory and semaphore set */ if (shmctl(shmid, IPC_RMID, NULL) == -1) errExit("shmctl"); if (semctl(semid, 0, IPC_RMID, dummy) == -1) errExit("semctl"); exit(EXIT_SUCCESS); } プログラムのソース: svshm_string_write.c The wr ... ... de < string.h > #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) union semun { /* Used in calls to semctl() */ int val; struct semid_ds * buf; unsigned short * array; #if defined(__linux__) struct seminfo * __buf; #endif }; #def ... SHM_RDONLY); if (addr == (void *) -1) errExit("shmat"); /* Initialize semaphore 0 in set with value 1 */ arg.val = 1; if (semctl(semid, 0, SETVAL, arg) == -1) errExit("semctl"); printf("shmid = %d; semid = %d\n", shmid, semid); /* Wait for semaphore v ... %s\n", addr); /* Remove shared memory and semaphore set */ if (shmctl(shmid, IPC_RMID, NULL) == -1) errExit("shmctl"); if (semctl(semid, 0, IPC_RMID, dummy) == -1) errExit("semctl"); exit(EXIT_SUCCESS); } プログラムのソース: svshm_string_write.c The wr ... ... に加算される。 これにより、そのプロセスがそのセマフォに対して行った操作の影響が取り消される (ただし、下記の「バグ」を参照)。 semctl (2) の SETVAL や SETALL を使ってセマフォの値が直接設定された場合、 すべてのプロセスの対応する semadj の値がクリアされる。 ... 有できる。 詳細は clone (2) を参照。 あるセマフォの semval , sempid , semzcnt , semnct の値はいずれも、適切な操作を指定して semctl (2) を呼び出すことで取得できる。 セマフォの上限 セマフォ集合のリソースに関する制限のうち、 semop () に影響を及ぼすものを以 ... or("semop"); exit(EXIT_FAILURE); } A further example of the use of semop () can be found in shmop (2). 関連項目 clone (2), semctl (2), semget (2), sigaction (2), capabilities (7), sem_overview (7), sysvipc (7), time (7) この文書について この man ページ ... ... に加算される。 これにより、そのプロセスがそのセマフォに対して行った操作の影響が取り消される (ただし、下記の「バグ」を参照)。 semctl (2) の SETVAL や SETALL を使ってセマフォの値が直接設定された場合、 すべてのプロセスの対応する semadj の値がクリアされる。 ... 有できる。 詳細は clone (2) を参照。 あるセマフォの semval , sempid , semzcnt , semnct の値はいずれも、適切な操作を指定して semctl (2) を呼び出すことで取得できる。 セマフォの上限 セマフォ集合のリソースに関する制限のうち、 semop () に影響を及ぼすものを以 ... or("semop"); exit(EXIT_FAILURE); } A further example of the use of semop () can be found in shmop (2). 関連項目 clone (2), semctl (2), semget (2), sigaction (2), capabilities (7), sem_overview (7), sysvipc (7), time (7) この文書について この man ページ ... ... hed_setattr (2) 3.14 sched_setparam (2) 2.0 sched_setscheduler (2) 2.0 sched_yield (2) 2.0 seccomp (2) 3.17 select (2) 1.0 semctl (2) 2.0 ipc (2) の「注意」の節を参照 semget (2) 2.0 ipc (2) の「注意」の節を参照 semop (2) 2.0 ipc (2) の「注意」の節を参照 ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。