mq_open - ライブラリコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 準拠
- バグ
- 関連項目
名前
mq_open - メッセージキューをオープンする
書式
#include <mqueue.h>
mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *name, int oflag, mode_t mode,
struct mq_attr *attr);
説明
mq_open
()は、新しい POSIX メッセージキューを作成するか、既存のキューを
オープンする。キューは
name
で識別される。
name
の構成の詳細については
mq_overview (7)
を参照。
oflag
引き数には、関数呼び出しの操作を制御するフラグを指定する。
oflag
には、以下のうちいずれか一つを必ず指定しなければならない。
-
O_RDONLY
-
メッセージの受信専用としてキューをオープンする。
-
O_WRONLY
-
メッセージの送信専用としてキューをオープンする。
-
O_RDWR
-
メッセージの送受信両用としてキューをオープンする。
0 個以上の下記のフラグを、ビット単位の OR (論理和) で
oflag
に追加で指定できる。
-
O_NONBLOCK
-
非停止 (non-blocking) モードでキューをオープンする。
mq_receive
()と
mq_send
()は、通常は停止 (block) する状況において、エラー
EAGAIN
で失敗するようになる。
-
O_CREAT
-
存在しない場合、メッセージキューを作成する。
メッセージキューの所有者 (ユーザ ID) とグループ所有権 (グループ ID) は、
それぞれ呼び出し元プロセスの実効ユーザ ID と実効グループ ID に設定される。
-
O_EXCL
-
O_CREAT
が
oflag
に指定され、かつ指定された名前
name
を持つキューがすでに存在する場合、エラー
EEXIST
で失敗する。
oflag
に
O_CREAT
を指定する場合、追加で 2つの引き数を与える必要がある。
mode
引き数は、新しいキューに適用される許可設定 (permission) を、
open
(2) と同じように指定する。
許可設定はプロセスの umask でマスクされる。
attr
引き数は、キューの属性を指定する。詳細は、
mq_getattr
(2)を参照。
attr
が NULL の場合、キューは実装で定義されたデフォルト属性で作成される。
返り値
成功すると、
mq_open
()はメッセージキュー記述子 (message queue descriptor) を返す。
メッセージキュー記述子は他のメッセージキュー関連の関数で使用される。
エラーの場合、
mq_open
()は
"(mqd_t)-1"
を返し、
errno
にエラーを示す値を設定する。
エラー
-
EACCESS
-
キューは存在するが、呼び出し元が指定されたモードでそのキュー
をオープンする許可を持たない。
-
EINVAL
-
oflag
に
O_CREAT
が指定され、かつ
attr
が NULL 以外だが、
attr->mq_maxmsg
か
attr->mq_msqsize
が不正であった。
これらのフィールドは両方とも 0 より大きくなければならない。
プロセスが特権を持たない
(
CAP_SYS_RESOURCE
ケーパビリティを持たない) 場合、
attr->mq_maxmsg
と
attr->mq_msgsize
は、それぞれ上限
msg_max
、
msgsize_max
以下でなければならない。
また、特権プロセスの場合でも、
attr->mq_maxmsg
は
HARD_MAX
上限を超えることはできない。
(これらの上限に関する詳細は
mq_overview
(7) を参照。)
-
EEXIST
-
oflag
に
O_CREAT
と
O_EXCL
の両方が指定されたが、指定された名前
name
を持つキューがすでに存在する。
-
EMFILE
-
そのプロセスがオープンしているファイルとメッセージキューの数が
プロセス毎の上限に達している。
-
ENAMETOOLONG
-
name
が長すぎる。
-
ENFILE
-
システム全体でオープンしているファイルとメッセージキューの合計数が
システム上限に達している。
-
ENOENT
-
O_CREAT
フラグが
oflag
に指定されなかったが、指定された名前
name
を持つキューが存在しない。
-
ENOMEM
-
十分なメモリがない。
-
ENOSPC
-
新しいメッセージキューを作成するのに十分な空間がない。
このエラーはおそらく
queues_max
上限に抵触したため起こったのだろう。
mq_overview
(7) を参照。
準拠
バグ
2.6.14 より前のカーネルには、
プロセスの umask が
mode
で指定された許可設定に適用されなかった。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする