Linux发送与接收信息

receive:

View Code
#include <sys/types.h>
#include 
<sys/ipc.h>
#include 
<sys/msg.h>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<unistd.h>
#include 
<string.h>

#define BUFFER_SIZE  512

struct message
{
    
long msg_type;
    
char msg_text[BUFFER_SIZE];
};

int main()
{
    
int qid;
    key_t key;
    
struct message msg;
    
    
if((key=ftok(".",'a'))==-1)
    {
        perror(
"ftok");
        exit(
1);
    }

    
if((qid=msgget(key,IPC_CREAT|0666))==-1)
    {
        perror(
"msgget");
        exit(
1);
    }

    printf(
"Open queue %d",qid);

    
do
    {
        memset(msg.msg_text,
0,BUFFER_SIZE);
        
if(msgrcv(qid,(void*)&msg,BUFFER_SIZE,0,0)<0)
        {
            perror(
"msgrcv");
            exit(
1);
        }

        printf(
"The message from process %d : %s",(int)msg.msg_type,msg.msg_text);
        
    }
while(strncmp(msg.msg_text,"quit",4));

    
if((msgctl(qid,IPC_RMID,NULL))<0)
    {
        perror(
"msgctl");
        exit(
1);
    }
    
    exit(
0);
    
}

 

send:

 

View Code
#include <sys/types.h>
#include 
<sys/ipc.h>
#include 
<sys/msg.h>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<unistd.h>
#include 
<string.h>

#define BUFFER_SIZE 512


struct message{
    
long msg_type;
    
char msg_text[BUFFER_SIZE];
};

int main()
{
    
int qid;
    key_t key;
    
struct message msg;
    
    
if((key=ftok(".",'a'))==-1)
    {
        perror(
"ftok");
        exit(
1);
    }

    
if((qid=msgget(key,IPC_CREAT|0666))==-1)
    {
        perror(
"msgget");
        exit(
1);
    }

    printf(
"Open queue %d\n",qid);
    
    
while(1)
    {
        printf(
"Enter some message to the queue:");
        
if((fgets(msg.msg_text,BUFFER_SIZE,stdin))==NULL)
        {
            puts(
"No message");
            exit(
1);
        }
        msg.msg_type
=getpid();
        
        
if((msgsnd(qid,&msg,strlen(msg.msg_text),0))<0)
        {
            perror(
"message posted");
            exit(
1);
        }

        
if(strncmp(msg.msg_text,"quit",4)==0)
        {
            
break;
        }

    }
    exit(
0);
}


 

gcc 两者

 #运行接收

./msgcrv 

#运行发送 

./msgsnd

#open two console to see the effect

posted @ 2011-05-18 00:54  邓维  阅读(497)  评论(0编辑  收藏  举报