tail head cat sleep
QR code linking to this page

manページ  — SEMOP

名称

semop – セマフォ集合に対する不可分な操作の配列

内容

ライブラリ

Standard C Library (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 の値の論理和 ( OR) を取って sem_flg メンバに入れることが可能です。

実行される操作は次のように sem_op の値に依存します:

プロセスが使用しているセマフォごとに、カーネルは、先に述べたように "終了時調整" 値を保持します。 自発的であれ非自発的にであれ、プロセスが終了するときには、 各セマフォに対する終了時調整値がセマフォの値に追加されます。 これを、プロセスが予期せず終了してしまう場合に 資源を必ず解放することを保証するのに使用可能です。

戻り値

The semop function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

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 が指定されていてもメモリ待ちでブロックすることがあります。

SEMOP (2) September 22, 1995

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

There are two major products of Berkeley, CA -- LSD and UNIX. We don't believe this to be strictly by coincidence.
Jeremy S. Anderson