1. 程式人生 > >Linux C 學習日記(3)訊息

Linux C 學習日記(3)訊息

                                          程式一:
#include<sys/msg.h>
#include<string.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
int main()
{
  key_t key;
  struct msgbuf{
        long mtype;   //訊息型別
        char buff[1024]; //訊息長度
  }buf;             //定義一個訊息佇列
int id,pid; key=ftok("/",'s'); id=msgget(key,IPC_CREAT|0777); //建立訊息佇列 pid=fork(); if(pid>0) { while(1) { buf.mtype=2; //表示訊息的型別 接收時,接收對應的訊息型別 型別是 2 fgets(buf.buff,1024,stdin); //從螢幕讀取資料 msgsnd(id,(void *)&buf,strlen(buf.buff)+1,0); //傳送資料 “+1” 包括了回車鍵 } wait(); } else (pid==
0); { while(1) { msgrcv(id,&buf,sizeof(buf.buff),3,0); //接收訊息型別為 3 的資訊 printf("%s",buf.buff); } } return 0; }
           第二個程式與第一個程式大體類似,需注意 **傳送和接收是一對**
                                 它們的訊息型別是一樣的   
                                      程式二:                           
#include<sys/msg.h>
#include<string.h> #include<stdio.h> #include<sys/ipc.h> #include<sys/types.h> int main() { key_t key; struct msgbuf{ long mtype; char buff[1024]; }buf; int id,pid; key=ftok("/",'s'); id=msgget(key,IPC_CREAT|0777); pid=fork(); if(pid==0) { while(1) { msgrcv(id,&buf,sizeof(buf.buff),2,0); //接收訊息 型別是 2 和第一個傳送的訊息是一樣的 printf("%s",buf.buff); } } else(pid>0); { while(1) { buf.mtype=3; //傳送訊息 型別是 3 fgets(buf.buff,1024,stdin); msgsnd(id,(void *)&buf,strlen(buf.buff)+1,0); } wait(); } return 0; }