Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxメッセージ・キュー・プログラミングの例  

はじめに:

メッセージキューはメッセージのリンクリストです。メッセージは、特定のフォーマットと特定の優先順位を持つレコードと見なすことができます。メッセージキューへの書き込みアクセス権を持つプロセスは、特定の規則に従って新しいメッセージを追加できます;メッセージキューへの読み取り権限を持つプロセスは、メッセージキューからメッセージを読み取ることができます。

機能:

1.新しいメッセージキューを作成す

Linuxメッセージ・キュー・プログラミングの例  

はじめに:

メッセージキューはメッセージのリンクリストです。メッセージは、特定のフォーマットと特定の優先順位を持つレコードと見なすことができます。メッセージキューへの書き込みアクセス権を持つプロセスは、特定の規則に従って新しいメッセージを追加できます;メッセージキューへの読み取り権限を持つプロセスは、メッセージキューからメッセージを読み取ることができます。

機能:

1.新しいメッセージキューを作成す

  
/*メッセージキューを作成する* /if(msqid< 0){printf(" msqを作成できませんでした。  Errno =%d [%s] \\ n "、errno、strerror(errno)); exit(-1);}} while(1){printf("入力メッセージタイプ(end:0): "); scanf("%d"、& msg_type); if(msg_type == 0)break; printf("送信する入力メッセージ:"); scanf("%s"、str); msgs.msgtype = msg_type; strcpy(msgs.msgtext、str); /*メッセージキューを送信* /ret_value = msgsnd(msqid、& msgs、sizeof(struct msgstru)、IPC_NOWAIT); if(ret_value< 0){printf(" Msgsnd()msgの書き込みに失敗しました、errno =%d [%s] \\ n"、errno、strerror(errno)); exit(-1);}} msgctl(msqid、IPC_RMID、0); //メッセージキューの削除}

メッセージ受信側receive.c
/*receive.c * /#include< stdio.h> #include< sys /types.h> #include< sys /ipc.h> #include<; sys /msg.h> #include< errno.h> #define MSGKEY 1024struct msgstru {long msgtype; char msgtext [2048];}; /*子プロセス、リスニングメッセージキュー* /void childproc(){struct msgstru msgs; int msgid、ret_value; char str [512]; while(1){msgid = msgget(MSGKEY、IPC_EXCL); /*メッセージキューが存在するかどうかをチェック* /if(msgid< 0){pri Ntf( "msqが存在しません!errno =%d [%s] \\ n"、errno、strerror(errno)); sleep(2);続行;} /*メッセージキューの受信* /ret_value = msgrcv(msgid、&& A); msgs、sizeof(struct msgstru)、0,0); printf(" text = [%s] pid = [%d] \\ n"、msgs.msgtext、getpid());} return;} void main( ){int i、cpid; /* 5つの子プロセスを作成します* /(i = 0; i <5; i ++){cpid = fork(); if(cpid< 0)printf( "fork failed \\ n";そうでなければ(cpid == 0)/*子プロセス* /childproc();}}

Copyright © Windowsの知識 All Rights Reserved