システムインタフェース

メッセージの送受信

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;		/* メッセージバッファへのポインタ */
 	int				msgsz;		/* メッセージの長さ */
 	long				msgtyp;		/* 希望するメッセージタイプ */
 	int				msqid		/* 使用するメッセージ待ち行列の ID */
 	...
 	msgp = (struct msgbuf *)malloc((unsigned)(sizeof(struct msgbuf)
 				- sizeof msgp->mtext + maxmsgsz));
 	if (msgp == NULL) {
 		(void) fprintf(stderr, "msgop: %s %d 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");
 		...