消息队列错误的文件描述符错误
Message queue bad file descriptor error
我编写了一个简单的应用程序来理解POSIX消息队列。但该应用程序不断给出"错误的文件描述符"错误。
感谢stackoverflow用户。我们找到了解决方案。以下是更新后的代码。
#include <mqueue.h>
#include <string.h>
#include <iostream>
#include <errno.h>
using namespace std;
int main(int argc, char *argv[])
{
mqd_t messageQueue;
mq_attr attr;
messageQueue = mq_open("/test",O_RDWR|O_CREAT,0664,&attr);
attr.mq_maxmgs = 10;
attr.mq_msgsize = 4;
char c;
int pid = fork();
//client
if(pid == 0) {
if(mq_receive(messageQueue,&c,1,0) == -1)
cout<<"Error:"<<strerror(errno)<<"n";
cout<<"Received:"<<c<<"n";
}
//server
else if(pid > 0) {
c = 'a';
if(mq_send(messageQueue,&c,1,0) == -1)
cout<<"Error:"<<strerror(errno)<<"n";
cout<<"Send:"<<c<<"n";
mq_close(messageQueue);
}
else {
cout<<"Fork errorn";
}
return 0;
}
由于为mq_open
提供了O_CREAT
标志和属性列表,因此应将attr.mq_maxmsg
和attr.mq_msgsize
显式设置为正值。
错误。只需做两件事,一个数组说charc1[50],一个指向它的指针说char*ptr=c1;在receive方法中传递这个指针,当u打印消息打印c1[0]时,就这样了。还将接收方法中的大小更新为50,而不是1。
相关文章:
- AMQP-CPP >处理程序中的错误文件描述符
- 提升 ASIO 绑定:错误的文件描述符
- 将 Boost Asio 与 ZeroMQ 集成,文件描述符错误?
- VS 链路错误描述中的"@@YAHXZ"是什么意思?
- 如何将Hresult转换为错误描述
- 命名管道,选择错误的文件描述符C++
- 使用c++使用accept()和文件描述符会导致错误加重
- 套接字编程:"接受:错误的文件描述符"
- BGL:邻接列表为描述符返回错误的边缘属性
- 尽管 QSqlQuery::exec 失败,但没有提供错误描述
- 关于在模型/视图Qt文档中排序的描述可能是错误的
- 操作系统全局描述符表编译错误
- 更改描述函数行为的位置是否会导致错误?
- 提升错误代码人类可读的描述
- recv() 失败:错误的文件描述符 c++ Linux
- 消息队列错误的文件描述符错误
- Fork和pipe文件描述符错误
- 如何获得WinRT / Windows 10 Store代码的HRESULT错误代码的描述
- Vera ++抛出错误:无法打开配置文件默认的配置文件描述
- 用GDB中更有意义的错误描述替换SIGABRT