title: mqueue: message too long
body: <p>When I run the following program i have always the error message "Message too long". Why?</p>
  
  <p>this is the source:</p>
  
  <pre><code>#define NAME "/q"
  #define SIZE 16
  
  void main()
  {
  mqd_t mq;
  char buffer[SIZE+1];
  struct mq_attr attr; 
  
  attr.mq_flags = 0;
  attr.mq_maxmsg = 10;
  attr.mq_msgsize = SIZE;
  attr.mq_curmsgs = 0;
  
  mq = mq_open(NAME, O_CREAT | O_RDWR, 0644, &amp;attr);
  printf ("opening mqueue: %s\n", strerror(errno));
  
  mq_receive(mq, buffer, strlen(buffer), NULL);
  printf ("receiving: %s\n", strerror(errno));
  
  printf ("message: %s\n", buffer);
  
  unlink(NAME);
  }   
  </code></pre>
  
  <p>This is the outupt:</p>
  
  <pre><code>opening mqueue: Success
  receiving: Message too long
  message: 
  </code></pre>
  
  <p>/<strong>**<em>new edit</em>**</strong>/</p>
  
  <p>okok i changed the code for better eliminate some ambiguity</p>
  
  <pre><code>#define NAME "/q"
  #define SIZE 1024
  
  int main()
  {
    mqd_t mq;
    char buffer[SIZE+1] = {0};
    struct mq_attr attr = {0}; 
  
    attr.mq_flags = 0;
    attr.mq_maxmsg = 10;
    attr.mq_msgsize = SIZE;
    attr.mq_curmsgs = 0;
  
    if ((mqd_t) -1 == (mq = mq_open(NAME, O_CREAT | O_RDWR, 0644, &amp;attr)))
      printf("opening mqueue: %s\n", strerror(errno));
  
    if (-1 == mq_receive(mq, buffer, SIZE+1, NULL))
      printf("receiving: %s\n", strerror(errno));
  
    printf("message: %s\n", buffer);
  
    if (-1 == unlink(NAME))
      perror("unlink() failed");
  
    return 0;
  }   
  </code></pre>
  
  <p>output</p>
  
  <pre><code>receiving: Message too long
  message: 
  unlink() failed: No such file or directory
  </code></pre>