#include #include #include #include #include #include #include #define MSGQ_KEY 0x1234 #define PERM 0660 struct mymsg { long mtype; char mtext[1]; }; int main() { int msg_id; /* message Queue id. */ struct mymsg msg; /* message to send. */ int nmsg; /* number of msg send. */ int status; /* status returned by msgsnd(). */ /* * Create Message Queue */ if ( (msg_id = msgget (MSGQ_KEY, PERM | IPC_CREAT)) == -1 ) { perror ("msgget: "); exit (EXIT_FAILURE); } /* * now write message one by one until Queue is full */ msg.mtype = 1; msg.mtext[0] = 'A'; nmsg = 0; do { status = msgsnd (msg_id, &msg, sizeof(msg.mtext), IPC_NOWAIT); nmsg++; printf ("Sent msg #%d\r", nmsg); } while ( status == 0 ); if (errno != EAGAIN ) { /* eh? we didn't overflow? */ perror ("msgsnd: "); exit (EXIT_FAILURE); } printf ("Queue full, sent %d messages\n", nmsg-1); exit (EXIT_SUCCESS); }