msgsnd(2) と msgrcv(2) 関数は、それぞれメッセージを送受信します。msgid 引数は、既存のメッセージ待ち行列の ID でなければなりません。msgp 引数は、メッセージのタイプとテキストを含んでいる構造体へのポインタです。msgsz 引数は、メッセージの長さをバイト数で指定します。msgflg 引数には、様々な制御フラグを渡すことができます。
次に、msgsnd(2) と msgrcv(2) の使用例を示します。
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> ... int msgflg; /* 操作用のメッセージフラグ */ struct msgbuf *msgp; /* メッセージバッファへのポインタ */ size_t msgsz; /* メッセージの長さ */ size_t maxmsgsize; long msgtyp; /* 希望するメッセージタイプ */ int msqid /* 使用するメッセージ待ち行列の ID */ ... msgp = malloc(sizeof(struct msgbuf) - sizeof (msgp->mtext) + maxmsgsz); if (msgp == NULL) { (void) fprintf(stderr, "msgop: %s %ld byte messages.¥n", "could not allocate message buffer for", maxmsgsz); exit(1); ... msgsz = ... msgflg = ... if (msgsnd(msqid, msgp, msgsz, msgflg) == -1) perror("msgop: msgsnd failed"); ... msgsz = ... msgtyp = first_on_queue; msgflg = ... if (rtrn = msgrcv(msqid, msgp, msgsz, msgtyp, msgflg) == -1) perror("msgop: msgrcv failed"); ...