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:

  1. fill mq_attr struct (doc):

    struct mq_attr attr;   attr.mq_flags = 0;   attr.mq_maxmsg = 10;   attr.mq_msgsize = 33;   attr.mq_curmsgs = 0;   
  2. create queue mq_open in master process (doc):

    mqd_t queue = mq_open(qname, o_creat|o_rdwr, 0644, &attr); 
  3. in writer process open queue writing:

    mqd_t queue = mq_open(qname, o_wronly); 

    and send text. length of text must lesser mq_msgsize attribute of queue (doc):

    mq_send(queue, "some message", strlen("some message")+1, 1); 
  4. 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_msgsize attribute of queue. here create 50-byte buffer while mq_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

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -