Linuxの高度なプログラミングの基礎--プロセス間の通信は1つのメッセージキューで複数のプロセスの通信を実現する
3487 ワード
プロセス間通信は1つのメッセージキューで複数のプロセスの通信を実現するプロセスaはプロセスBにhello worldを送信し、プロセスBは印刷を受信し、 プロセスcはプロセスdに自分の学号クラスの名前を送信し、プロセスdは印刷を受信し、 は同じメッセージキューで を実現する.
a
#include
#include
#include
#include
#include
#include
#include
#include
struct msg{
long msg_types;
char msg_buf[512];
};
int main()
{
key_t key;
key = ftok (".",5);
int msgdis;
if ((msgdis = msgget (key,IPC_CREAT|777)) == -1) { perror("msgget :
"); exit(1); }
printf (" :%d
",msgdis);
struct msg pmsg;
pid_t pid;
pid = getpid();
pmsg.msg_types = pid;
printf (" : %d
",pid);
sprintf (pmsg.msg_buf,"%s","hello world");
int len;
len = strlen (pmsg.msg_buf);
if ((msgsnd(msgdis,&pmsg,len,0)) == -1) { perror("msgsnd"); exit(1);}
return 0;
}
b
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 4096
struct msg{
long msg_types;
char msg_buf[512];
};
int main()
{
int pid,mpid;
printf ("
");
scanf ("%d",&mpid);
printf ("
");
scanf ("%d",&pid);
struct msg pmsg;
int len;
if ( (len = msgrcv(mpid,&pmsg,BUFSIZE,pid,0)) == -1) { perror ("msgrcv : "); exit (1); }
pmsg.msg_buf[len] = '\0';
printf ("message text : %s
",pmsg.msg_buf);
return 0;
}
c
#include
#include
#include
#include
#include
#include
#include
#include
struct msg{
long msg_types;
char msg_buf[512];
};
int main()
{
int msgdis;
printf (" :
");
scanf ("%d",&msgdis);
struct msg pmsg;
pid_t pid;
pid = getpid();
pmsg.msg_types = pid;
printf (" : %d
",pid);
sprintf (pmsg.msg_buf,"%s"," :1715925506 : : ");
int len;
len = strlen (pmsg.msg_buf);
if ((msgsnd(msgdis,&pmsg,len,0)) == -1) { perror("msgsnd"); exit(1);}
return 0;
}
d
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 4096
struct msg{
long msg_types;
char msg_buf[512];
};
int main()
{
int pid,mpid;
printf ("
");
scanf ("%d",&mpid);
printf ("
");
scanf ("%d",&pid);
struct msg pmsg;
int len;
if ( (len = msgrcv(mpid,&pmsg,BUFSIZE,pid,0)) == -1) { perror ("msgrcv : "); exit (1); }
pmsg.msg_buf[len] = '\0';
printf ("message text : %s
",pmsg.msg_buf);
return 0;
}
``
** , **