日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




セマフォ制御操作を行います。

形式

#include <sem.h>

int semctl (int semid, int semnum, int cmd, ...);


引数



semid

セマフォセット識別子。正の整数。 semget関数で作成され,制御操作を行うセマフォセットの識別に使用されます。

semnum

セマフォ番号。ゼロまたは正の整数。制御操作を行うセマフォセット内のセマフォを識別するための番号です。

cmd

セマフォに対して実行する制御操作。

...

cmd で要求された制御操作に依存する union semunタイプのオプションの 4 つ目の引数。

説明

semctl関数は,cmd で指定されたさまざまなセマフォ制御操作を実行します。 4 つ目の引数の指定はオプションで,要求された操作に依存します。必要な場合は,次のように明示的に宣言される union semunタイプの引数を指定します。

union semun { 
    int val; 
    struct semid_ds *buf; 
    unsigned short  *array; 
} arg; 

semid および semnum によって指定されたセマフォに対して,cmd で指定された以下のセマフォ制御操作が実行されます。各操作で必要な権限レベルを各コマンドとともに示します。 cmd の値に対するシンボリック名は, <sem.h>に定義されています。

  • GETVAL
    semval の値を返します。読み取り権限が必要。

  • SETVAL
    semval の値を arg.val に設定します。 arg は, semctlに対する 4 番目の引数の値です。このコマンドが正常に実行されると,すべてのプロセスの指定されたセマフォに対する semadj の値がクリアされます。変更権限が必要。

  • GETPID
    sempid の値を返します。読み取り権限が必要。

  • GETNCNT
    semncnt の値を返します。読み取り権限が必要。

  • GETZCNT
    semzcnt の値を返します。読み取り権限が必要。

以下の cmd の値は,セマフォセットのそれぞれの semval に影響します。

  • GETALL
    セマフォセット内の各セマフォに対して semval の値を返します。この値は arg.array でポイントされる配列に置かれます。 arg は, semctlに対する 4 つ目の引数です。読み取り権限が必要です。

  • SETALL
    arg.array でポイントされる配列に従って,セマフォセットの各セマフォの semval の値を設定します。 argsemctlに対する 4 つ目の引数です。このコマンドが正常に実行されると,すべてのプロセスで指定された各セマフォに対する semadj 値がクリアされます。変更権限が必要。

以下の cmd の値も使用できます。

  • IPC_STAT
    semid に関連する semid_ds データ構造体の各メンバの現在の値を,arg.buf でポイントされる構造体に置きます。 arg は, semctlに対する 4 つ目の引数です。この構造体の内容は <sem.h>で定義されます。読み取り権限が必要。

  • IPC_SET
    semid に関連する semid_ds 構造体の以下のメンバの値を, arg.buf でポイントされる構造体内の対応する値に設定します。 arg は, semctlに対する 4 つ目の引数です。

    sem_perm.uid 
    sem_perm.gid 
    sem_perm.mode 
    


    The Open Group Base Specifications の IPC General Description セクションで指定されたモード・ビットが, semid に対応する sem_perm.mode の対応するビットにコピーされます。他のビットの保管値は指定されません。
    このコマンドは,適切な特権を持つプロセス,あるいは semid に対応する semid_ds 構造体の sem_perm.cuid あるいは sem_perm.uid の値と同等の,有効なユーザ ID を持つプロセスによって実行できます。

  • IPC_RMID
    semid によって指定されたセマフォ識別子をシステムから削除し,関連するセマフォセットおよび semid_ds 構造体を無効にします。このコマンドは,適切な特権を持つプロセス,あるいは semid に対応する semid_ds 構造体の sem_perm.cuid あるいは sem_perm.uid の値と同等の,有効なユーザ ID を持つプロセスによって実行できます。


戻り値

n あるいは 0 正常終了時に関数が返す値は,次のように cmd に依存します。

  • GETVAL - semval の値

  • GETPID - sempid の値

  • GETNCNT - semncnt の値

  • GETZCNT - semzcnt の値

  • その他すべて - 0

- 1 エラーを示します。関数は, errno に次のいずれかの値を設定します。

  • EACCES -- 呼び出しプロセスによる操作が許可されませんでした。

  • EFAULT -- 関数に渡された引数にアクセスできません。

  • EINVAL -- semid の値が有効なセマフォ識別子ではありません。あるいは, semnum の値がゼロより小さいか sem_nsems と同じあるいはそれ以上です。あるいは, cmd の値が有効なコマンドではありません。

  • EPERM -- 引数 cmd が IPC_RMID あるいは IPC_SET と同じで,呼び出しプロセスの有効なユーザ ID が適切な特権をプロセスのものと同じでなく, semid と関連するデータ構造体の sem_perm.cuid あるいは sem_perm.uid の値と等しくありません。

  • EVMSERR -- 変換不可能な OpenVMS エラー


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.