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.

I have a natural revulsion to any operating system that shows so little planning as to have to named all of its commands after digestive noises (awk, grep, fsck, nroff).