queue - mq_receive: message too long -
i implementing communication between 2 processes using queue. problem when call function mq_receive, error: message long.
i have done following:
struct mq_attr attr; long size = attr.mq_msgsize; .... // initializing queue "/gateway" int rc = mq_receive(gateway, buffer, size, &prio); if print size value, size=1, while when print same size program (got same mechanism), not long integer ( -1217186280 )...
how can solve error?....so while size = 1, believe it's right "message long" why 1?
p.s. have tried put :
int rc = mq_receive(gateway, buffer, sizeof(buffer), &prio); but no result.
it seems need read docs more carefully. when call mq_receive should pass size of destination buffer. this size must greater mq_msgsize attribute of queue. in addition, seems have error in queue attributes initialisation makes proper mq_receive call impossible. here standard message queue session:
fill
mq_attrstruct (doc):struct mq_attr attr; attr.mq_flags = 0; attr.mq_maxmsg = 10; attr.mq_msgsize = 33; attr.mq_curmsgs = 0;create queue
mq_openin master process (doc):mqd_t queue = mq_open(qname, o_creat|o_rdwr, 0644, &attr);in writer process open queue writing:
mqd_t queue = mq_open(qname, o_wronly);and send text. length of text must lesser
mq_msgsizeattribute of queue (doc):mq_send(queue, "some message", strlen("some message")+1, 1);in reader process open queue reading:
mqd_t queue = mq_open(qname, o_rdonly);and allocate buffer , receive message. size of buffer *must greater
mq_msgsizeattribute of queue. here create 50-byte buffer whilemq_msgsize == 33(doc):char rcvmsg[50]; int iret = mq_receive(queue, rcvmsg, 50, null);
also remember should use %ld print long instead of %d.
Comments
Post a Comment