gpt4 book ai didi

c - mq_timedsend() 返回错误 14 "bad address"

转载 作者:行者123 更新时间:2023-11-30 15:19:18 26 4
gpt4 key购买 nike

当我执行下面的程序时,我收到错误地址作为错误代码 (14)。

int main (int argc, char *argv[])
{
char response [20];
struct mq_attr buf;
buf.mq_msgsize = sizeof (response);
buf.mq_maxmsg = 5;
response[0]= '1';
mqd_t handle = mq_open ("/test", O_CREAT | O_RDWR, 0, &buf);
int status = mq_timedsend (handle, (char *) &response, sizeof (response), 0,250000);
printf("value of status - %d\n", errno);

pthread_t my_thread_id;
pthread_attr_t attr;

}
<小时/>

附加信息:更新了代码如下,现在我收到错误代码 90(消息太长)

#include <stdio.h>
#include <errno.h>
#include <mqueue.h>
#include <pthread.h>
#include <time.h>


static struct timespec RcvCmdWaitTime;
int main (int argc, char *argv[])
{
char response [10];
struct mq_attr buf;
RcvCmdWaitTime.tv_sec = 0;
RcvCmdWaitTime.tv_nsec = 250000;
mqd_t handle;
buf.mq_msgsize = sizeof response;
buf.mq_maxmsg = 1;
int status;

if((handle = mq_open ("/test", O_CREAT | O_RDWR , S_IRWXU | S_IRWXG, &buf))==-1)
printf("mq-open error, error no:%d\n",errno);

status = mq_timedsend (handle, &response[0], sizeof response , 0, &RcvCmdWaitTime);
if (status == -1)
printf("mq_timedsend: Error:%d\n",errno);

}

我使用:gcc -pthread multi_thr.c -lrt来编译

最佳答案

如果前一个调用指示错误,您应该仅测试 errno

在本例中,如果 mq_timedsend() 返回 -1

int result = mq_timedsend (handle, response, sizeof response, 0, 250000);
if (-1 == result)
{
perror("mq_timedsend() failed)"; /* This issues a human readable error description based on the value of errno. */
}

另请注意

  • 强制转换响应不是必需的
  • sizeof 是运算符而不是函数
  • 您的代码使用的错误消息具有误导性
<小时/>

您还想检查 mq_open() 的结果:

mqd_t handle = mq_open ("/test", O_CREAT | O_RDWR, 0, &buf);
if (((mqd_t) -1) == handle)
{
perror("mq_open() failed");
abort(); /* or whatever to handle this error */
}

关于c - mq_timedsend() 返回错误 14 "bad address",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30773724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com