MQ_GETATTR

Section: Linux Programmer's Manual (3)
Updated: 2020-06-09
Index JM Home Page
 

名前

mq_getattr, mq_setattr - メッセージキューの属性を設定/取得する  

書式

#include <mqueue.h>

int mq_getattr(mqd_t mqdes, struct mq_attr *attr);

int mq_setattr(mqd_t mqdes, const struct mq_attr *newattr,
                 struct mq_attr *oldattr);

-lrt でリンクする。  

説明

mq_getattr() と mq_setattr() は、メッセージキュー記述子 mqdes で参照されるメッセージキューの属性の取得と変更をそれぞれ行う。

mq_getattr() は、 attr が指すバッファーに mq_attr 構造体を格納して返す。この構造体は以下のように定義されている:

struct mq_attr {
    long mq_flags;       /* フラグ: 0 か O_NONBLOCK */
    long mq_maxmsg;      /* キューの最大メッセージ数 */
    long mq_msgsize;     /* 最大メッセージサイズ (バイト単位) */
    long mq_curmsgs;     /* キューに現在入っているメッセージ数 */ };

mq_flags フィールドには、オープンメッセージキュー記述 (open message queue description) に関連付けられているフラグが格納される。 このフィールドは mq_open(3) でキューが作成される際に初期化される。 このフィールドに現れるフラグは O_NONBLOCK だけである。

mq_maxmsg と mq_msgsize フィールドは mq_open(3) でメッセージキューが作成される際にセットされる。 mq_maxmsg フィールドは、 mq_send(3) を使ってキューに入れることができるメッセージ数の上限である。 mq_msgsize フィールドは、キューに入れることができるメッセージの 上限サイズである。 これらのフィールドはどちらも 0 より大きな値でなければならない。 これらのフィールドに設定できる値の上限は /proc ファイルにより決まる。 /proc ファイルの詳細は mq_overview(7) に説明されている。

mq_curmsgs フィールドはキューに現在格納されているメッセージ数を返す。

mq_setattr() は、 newattr が指す mq_attr 構造体で与えられた情報を使って、メッセージキューの属性を設定する。 変更することができる属性は、 mq_flags の O_NONBLOCK フラグの設定だけである。 newattr の他のフィールドは無視される。 oldattr フィールドが NULL 以外の場合、 mq_getattr() が返すのと同じ情報を格納した mq_attr 構造体を oldattr が指すバッファーに入れて返す。  

返り値

成功すると、 mq_getattr () と mq_setattr () は 0 を返す。エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。  

エラー

EBADF
mqdes に指定されたメッセージキュー記述子が不正である。
EINVAL
newattr->mq_flags に O_NONBLOCK 以外のビットがセットされていた。
 

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
mq_getattr(), mq_setattr() Thread safety MT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008.  

注意

Linux では、 mq_getattr() と mq_setattr() はライブラリ関数であり、 mq_getsetattr(2) システムコールを用いて実装されている。  

例

下記のプログラムを使うと、 attr 引数に NULL を指定して mq_open(3) を呼び出した際に作成されるメッセージキューに割り当てられるデフォルトの mq_maxmsg と mq_msgsize の値を表示できる。 このプログラムの実行例を以下に示す。

$ ./a.out /testq Maximum # of messages on queue: 10 Maximum message size: 8192

Linux 3.5 以降では、 (mq_overview(7) に説明がある) 以下の /proc ファイルを使ってデフォルト値を制御できる。

$ uname -sr Linux 3.8.0 $ cat /proc/sys/fs/mqueue/msg_default 10 $ cat /proc/sys/fs/mqueue/msgsize_default 8192  

プログラムのソース

#include <mqueue.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h>

#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
                        } while (0)

int main(int argc, char *argv[]) {
    mqd_t mqd;
    struct mq_attr attr;


    if (argc != 2) {
        fprintf(stderr, "Usage: %s mq-name\n", argv[0]);
        exit(EXIT_FAILURE);
    }


    mqd = mq_open(argv[1], O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, NULL);
    if (mqd == (mqd_t) -1)
        errExit("mq_open");


    if (mq_getattr(mqd, &attr) == -1)
        errExit("mq_getattr");


    printf("Maximum # of messages on queue:   %ld\n", attr.mq_maxmsg);
    printf("Maximum message size:             %ld\n", attr.mq_msgsize);


    if (mq_unlink(argv[1]) == -1)
        errExit("mq_unlink");


    exit(EXIT_SUCCESS); }  

関連項目

mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

attr   getattr   メッセージキュー   setattr   キュー   メッセージ   msgsize   属性   struct   maxmsg   proc   mqueue   構造体   格納   long   flags   フラグ   Maximum   errExit   argv   記述   上限   overview   exit   unlink

Linux マニュアル 一覧

関連するコマンド・関数

mq_setattr.3   mq_getsetattr.2   mq_open.2   mq_open.3   mq_overview.7   mq_unlink.2
 

Index

名前
書式
説明
返り値
エラー
属性
準拠
注意
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:07 GMT, October 11, 2026