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_CREAT と O_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]
- 指定されたセマフォは、存在していません。
関連項目
close(2), open(2), umask(2), unlink(2), sem_getvalue(3), sem_post(3), sem_trywait(3), sem_wait(3), sem(4)規格
sem_open(), sem_close() と sem_unlink() 関数は、 ISO/IEC 9945-1:1996 (“POSIX.1”) に適合しています。歴史
名前付きセマフォのサポートは、 FreeBSD 5.0 ではじめて登場しました。January 9, 2010 | FreeBSD |