使用 mqqueue 将数据读入缓冲区时出现问题
Trouble when reading data into buffer using mqqueue
我正在使用 mqueue 在线程之间进行通信,但在传递对象时遇到问题。
mq_send
和mq_receive
将char*
作为对象的参数。
我按以下方式使用它们。
foo* foo = new foo();
foo->set_id(3);
mq_send(myQueue, (char*)foo, 1024, 1);
然后
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals 3
//Send the object to another queue
mq_send(myOtherQueue, buffer, 1024, 1);
}
到目前为止一切顺利。
问题就在这里
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals garbage 323234234
}
第二次投射缓冲区时,我得到了垃圾。
我阅读了 static_cast
和 dynamic_cast
,但我找不到问题所在。
怎么了?
我在这里看到两个问题。首先,你的 Foo TriviallyCopyable
?
第二,
char* buffer;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
我没有看到 buffer
的任何分配。
我正在使用 mqueue 在线程之间进行通信,但在传递对象时遇到问题。
mq_send
和mq_receive
将char*
作为对象的参数。
我按以下方式使用它们。
foo* foo = new foo();
foo->set_id(3);
mq_send(myQueue, (char*)foo, 1024, 1);
然后
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals 3
//Send the object to another queue
mq_send(myOtherQueue, buffer, 1024, 1);
}
到目前为止一切顺利。
问题就在这里
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals garbage 323234234
}
第二次投射缓冲区时,我得到了垃圾。
我阅读了 static_cast
和 dynamic_cast
,但我找不到问题所在。
怎么了?
我在这里看到两个问题。首先,你的 Foo TriviallyCopyable
?
第二,
char* buffer;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
我没有看到 buffer
的任何分配。