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

你可能感兴趣的:(linux)