c - Error in msgrcv: Invalid Arguments -
I am writing a code on a UNIX system in C. I have created a message queue server every time I get a new message I The fork and baby process handles the new customer. The server waits for the new customer here is the code.
  for (;;) {struct my_msgbuf buf; If (MSGRCV (MScDID, and (BF.M.T.P.), Size (BF), 1, 0) == -1) Peer ("MSGRCV"); If ((pid = fork ()) <0) false ("fork"); If (pid == 0) {// child code}} now code works for the first time, but msgrcv returns the following error on the second visit - msgrcv: invalid instead Argument is waiting for new messages.    
   MSGRCV  a  msgsz  parameter, but it It is not the size of a  struct my_msgbuf ; rather, it is the number of bytes in the  mtext []  area of the structure. 
  You are not really going to use  struct msgbuf , I think it would be normal to define your own with the appropriate place. You have this method, your  Buf  declaration allocates only 1 byte, and then the code tells the kernel that you have  sizeof buf  bytes, which you do not. As a result, the code is called to call  undefined behavior  or UB. 
  This can not be understood by  EINVAL , but one must always correct known bugs and retest because UB taints further analysis ... 
   
 
  
Comments
Post a Comment