プログラミングインタフェース

メッセージの送受信

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");
 		...