EN JA
SEM_OPEN(3)
SEM_OPEN(3) FreeBSD Library Functions Manual SEM_OPEN(3)

名称

sem_open, sem_close, sem_unlink名前付きセマフォ操作

ライブラリ

Standard C Library (libc, -lc)

書式

#include < semaphore.h>

sem_t *
sem_open( const char *name, int oflag, ...);

int
sem_close( sem_t *sem);

int
sem_unlink( const char *name);

解説

sem_open() 関数は、 name によって指定された名前付きセマフォを作成するかオープンします。返されたセマフォは、その後の sem_getvalue(3), sem_wait(3), sem_trywait(3), sem_post(3)sem_close() 呼び出しで使用されます。

この実装は、 name の値を要求します: それは、スラッシュ (‘ /’) で始まり、他のスラッシュ文字を含んではいけません。

次のビットは、 oflag 引数で設定されます:

O_CREAT
存在しないなら、セマフォを作成します。

sem_open() への呼び出しの 3 つ目の引数は、タイプ mode_t でセマフォのためのモードを指定しなければなりません。 S_IWUSR, S_IWGRP, と S_IWOTH ビットだけが調べられます。セマフォで“read”パーミッションのみ与えるということはできません。プロセスのファイル作成マスクに従ってモードは変更されます。 umask(2) を参照。

4 つ目の引数は、 unsigned int でセマフォのために初期値を指定しなければなりません。そして、 SEM_VALUE_MAX より大きくなってはいけません。

O_EXCL
存在しないなら、セマフォを作成します。セマフォが既に存在しているなら、 sem_open() は、失敗します。また、 O_CREAT が指定されていなければ、このフラグは、無視されます。

sem_close() 関数は、 sem_open() の呼び出しによってオープンされた名前付きセマフォをクローズします。

sem_unlink() 関数は、 name で指定されたセマフォを削除します。セマフォのために割り付けられたリソースは、すべてのプロセスがそれをオープンクローズするセマフォがあるときのみ、割り付けを解放します。

戻り値

成功するなら、 sem_open() 関数は、オープンされたセマフォのアドレスを返します。同じ name 引数が sem_close() への呼び出しの邪魔が入ることなしに同じプロセスによって sem_open() への複数の呼び出しによって与えられるなら、その都度、同じアドレスが返されます。セマフォがオープンできないなら、 sem_open() は、 SEM_FAILED を返し、グローバル変数 errno にエラーを示す値が設定されます。


The sem_close() and sem_unlink() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

sem_open() 関数は、次の場合に失敗します:
[ EACCES]
セマフォは、存在し、それが作成されたとき oflag によって指定されたパーミッションは、このプロセスへのアクセスを拒絶しました。
[ EACCES]
セマフォは、存在していませんが、それを作成するパーミッションは、拒絶されました。
[ EEXIST]
O_CREATO_EXCL は、設定されましたが、セマフォは、既に存在しています。
[ EINTR]
呼び出しは、シグナルによって割り込まれました。
[ EINVAL]
sem_open() 操作は、与えられた name ではサポートされません。
[ EINVAL]
value 引数は、 SEM_VALUE_MAX より大きいです。
[ ENAMETOOLONG]
name 引数が長過ぎます。
[ ENFILE]
セマフォでのシステム制限に達しました。
[ ENOENT]
O_CREAT は、設定されていませんが、指定されたセマフォは、存在していません。
[ ENOSPC]
セマフォを作成するための空間がありません。

sem_close() 関数は、次の場合に失敗します:

[ EINVAL]
sem 引数は、有効なセマフォではありません。

sem_unlink() 関数は、次の場合に失敗します:

[ EACCES]
セマフォを削除 (unlink) するためにパーミッションは、拒絶されました。
[ ENAMETOOLONG]
指定された name は、長過ぎます。
[ ENOENT]
指定されたセマフォは、存在していません。

規格

sem_open(), sem_close() と sem_unlink() 関数は、 ISO/IEC 9945-1:1996 (“POSIX.1”) に適合しています。

歴史

名前付きセマフォのサポートは、 FreeBSD 5.0 ではじめて登場しました。
January 9, 2010 FreeBSD