日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
SEMOP(2) FreeBSD システムコールマニュアル SEMOP(2) 名称 semop -- セマフォ集合での不可分の操作の配列 ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semop(int semid, struct sembuf *array, size_t nops); 解説 semop() システムコールは、semid によって示されたセマフォの集合で array に よって示された操作の配列を不可分に実行します。array の長さは、nops によっ て示されます。各操作は、次のように定義される struct sembuf でエンコードさ れます: struct sembuf { u_short sem_num; /* セマフォ番号 */ short sem_op; /* セマフォ操作 */ short sem_flg; /* 操作フラグ */ }; array の要素ごとに、sem_op と sem_flg は、集合のセマフォ番号 sem_num で実 行される操作を決定します。値 SEM_UNDO と IPC_NOWAIT は、与えられた操作の 振る舞いを修正するために、sem_flg メンバに論理和 (OR) されます。 実行された操作は、次のように sem_op の値に依存します: • sem_op が正であり、プロセスに変更パーミッションがあるとき、セマフォの 値は、sem_op の値によって増加されます。SEM_UNDO が指定されるなら、終 了値のセマフォの調整は、sem_op の値によって減少されます。sem_op のた めの正の値は、一般的に、セマフォと関連したリソースを解放しているプロ セスに対応しています。 • sem_op が負で、プロセスに変更パーミッションがあるとき、振る舞いは、セ マフォの現在の値に依存します: • セマフォの現在の値が sem_op の絶対値以上であるなら、値は、sem_op の絶対値によって減少されます。SEM_UNDO が指定されるなら、終了値の セマフォの調整は、sem_op の絶対値によって増加されます。 • セマフォの現在の値が sem_op の絶対値未満であるなら、次の 1 つが起 こります: • IPC_NOWAIT が指定されたなら、semop() は、EAGAIN の返り値で直 ちに返ります。 • そうでなければ、呼び出しているプロセスは、次の条件の 1 つが満 足されるまで、スリープ状態になります: • いくつかの他のプロセスは、semctl(2) の IPC_RMID オプショ ンでセマフォを削除する場合。この場合に、semop() は、EIDRM の返り値で直ちに返ります。 • プロセスが、捕獲されるシグナルを受信した場合。この場合 に、プロセスは、sigaction(2) によって定義されるように実行 を再開します。 • セマフォの値が、sem_op の絶対値より大きいか、または等しい 場合。この条件が真になるとき、セマフォの値は、sem_op の絶 対値によって減少され、終了値のセマフォの調整は、sem_op の 絶対値によって増加されます。 sem_op のための負の値は、一般的に、プロセスが、利用可能となるリソース を待つことを意味しています。 • sem_op が 0 であり、プロセスに読み込みパーミッションがあるとき、次の 1 つが起こります: • セマフォの現在の値が 0 と等しいなら、semop() は、直ちに返ることが できます。 • IPC_NOWAIT が指定されていたなら、semop() は、EAGAIN の返り値で直 ちに返ります。 • そうでなければ、呼び出しているプロセスは、次の条件の 1 つが満足さ れるまで、スリープ状態となります: • ある他のプロセスは、semctl(2) の IPC_RMID オプションでセマ フォを削除する場合。この場合に、semop() は、EIDRM の返り値で 直ちに返ります。 • プロセスは、捕獲されるシグナルを受信した場合。この場合に、プ ロセスは、sigaction(2) によって定義されるように実行を再開しま す。 • セマフォの値は、0 となった場合。 プロセスが使用中であった、セマフォごとに、カーネルは、前に暗示されるよう に、``終了時の調整'' 値を維持します。プロセスが終了するとき、自発的または 非自発的に、セマフォごとの終了値の調整が、セマフォの値に追加されます。プ ロセスが予想外に終了するなら、リソースが解放されることを保証するためにこ れを使用することができます。 戻り値 関数 semop() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno にエラーを示す値が設定されます。 エラー semop() システムコールは、次の場合に失敗します: [EINVAL] semid に対応するセマフォの集合ではないか、またはプロセ スが、プロセスごとの SEM_UNDO 構造体の数のシステムで定 義された制限を越えています。 [EACCES] セマフォの集合の操作とモードの間の不一致のためにパー ミッションが拒否されました。 [EAGAIN] セマフォの値が、スリープされたプロセスを結果となり、 IPC_NOWAIT が指定されました。 [E2BIG] あまりに多くの操作が、指定されました。[SEMOPM] [EFBIG] sem_num が、集合のために有効なセマフォの範囲にありませ んでした。 [EIDRM] セマフォの集合が、システムから削除されました。 [EINTR] semop() システムコールが、シグナルによって割り込まれま した。 [ENOSPC] システムの SEM_UNDO プール [SEMMNU] が、満杯です。 [ERANGE] 要求された操作によって、セマフォの現在の値 [SEMVMX] ま たはその終了時の調整 [SEMAEM] が、システムに課された制 限を越えています。 関連項目 semctl(2), semget(2), sigaction(2) バグ semop() システムコールは、たとえ IPC_NOWAIT が指定されていたとしても、メ モリのウェート (待ち) をブロックします。 FreeBSD 11.4 September 22, 1995 FreeBSD 11.4