8

Linuxでメッセージキューを作成するのに問題があります。私が得ているエラーは「無効な引数」です。私が大邸宅にしなければならないもう一つのことは、コードがQtプロジェクトの一部であるということです。

よくある間違いは、名前が(/)で始まらず、argの数が正しくないことですが、私はそれらをチェックしました!

これが私が実行しようとしているコードです:

#define MQ_TEST_PATH            "/test_queue"
#define MQ_MAX_MSG_SIZE         256
#define MQ_MAX_MSG_COUNT        20

struct mq_attr mqAttr;
mqAttr.mq_maxmsg = MQ_MAX_MSG_COUNT;
mqAttr.mq_msgsize = MQ_MAX_MSG_SIZE;

mq_unlink(MQ_TEST_PATH);

mode_t mode =  S_IRUSR | S_IWUSR;
int oflags = O_WRONLY | O_CREAT | O_EXCL;

mqd_t mqd;
mqd = mq_open(MQ_TEST_PATH, oflags, mode, &mqAttr);

if(mqd < 0){
    perror("Error on open");
    qDebug()<<mqd;
    return 0;
}

mq_close(mqd);
mq_unlink(MQ_TEST_PATH);

出力:

Error on open: Invalid argument
-1 
4

1 に答える 1

13

男 mq_open

EINVAL O_CREAT は で指定され oflag、 でattrはありませんでしNULLたが、attr->mq_maxmsgまたはattr->mq_msqsizeは無効でした。これらのフィールドは両方とも 0 より大きくなければなりません。特権を持たない (機能を持たないCAP_SYS_RESOURCE)プロセスでは、 制限attr->mq_maxmsg以下でなければなりませんmsg_max

男 mq_overview

> /proc/sys/fs/mqueue/msg_max

msg_max のデフォルト値は 10 です。

于 2012-12-18T09:16:16.173 に答える