I sent message from one process to another using message queue. The process receiving messages prints output only after all calls to msgrcv
function are done. What I was expecting is that it will print data as it receives a message but it prints data only after receiving all messages.
I have tried changing permissions. Ihave used 0666 | IPC_NOWAIT, 0666 | IPC_NOWAIT | IPC_CREAT
.
server.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#include <string.h>
struct mesg_buffer {
long mtype;
char mtext[100];
};
int main(void){
struct mesg_buffer message;
int sq_msgid, uq_msgid;
int num_users = 0;
sq_msgid = msgget(ftok("server_queue",1), 0666 | IPC_CREAT);
uq_msgid = msgget(ftok("user_queue",1), 0666 | IPC_CREAT);
for(int i=0;i<2;i++){
printf("%ld",msgrcv(sq_msgid, &message, sizeof(message), 1, 0));
}
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <pthread.h>
#include <semaphore.h>
#include <signal.h>
#include <string.h>
struct mesg_buffer {
long mtype;
char mtext[100];
};
int main(void){
struct mesg_buffer message;
int sq_msgid, uq_msgid;
sq_msgid = msgget(ftok("server_queue",1), 0666 | IPC_CREAT);
strcpy(message.mtext, "join");
message.mtype = 1;
int r = msgsnd(sq_msgid, &message, sizeof(message), 0);
printf("%d", r);
}