/*发送消息,单项的传递消息*/

来源:互联网 发布:js代码压缩工具 gzip 编辑:程序博客网 时间:2024/05/22 05:04

#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>                   //头文件信息
#define MAX_TEXT 512                  //定义的宏MAX_TEXT的值为512个字节
                                      // 系统定义的BUFSIZ的值为8192

struct my_msg_st                      //定义一个结构体名为my_msg_st
{
    int my_msg_type;                  //结构体成员,定义一个名为my_msg_type为整型数据
    char msg_text[MAX_TEXT];          //结构本成员,定义一个字符数组类型my_text[512]
};

int main(int argc, char *argv[])      //主函数,包含两个参数
{
    int running=1;                    //定义running为整型数据,给running赋初值为1
    struct my_msg_st some_data;       //定义了一个结构体变量名为some_data
    int msgid;                        //定义msgid为整型数据
    char buffer[BUFSIZ];              //定义一个字符数组buffer[8192]

    /*下面:如果可要创建一个Key值为12345,且户权限为0666的消息队列,如果创建失败为-1,则执行下面*/
    if((msgid=msgget((key_t)12345,0666|IPC_CREAT))==-1)
    {
 perror("message");                    //当msgid等于-1时则打印错误的信息
 exit(EXIT_FAILURE);                  //异常退出
    }

    while(running)                           //当running的值为"真"时
    {
 printf("Enter the mssage to send:"); //打印提示信息
 fgets(buffer,BUFSIZ,stdin);          //从键盘输入最大BUFSIZ这么大的字节,保存在buffer中去
 some_data.my_msg_type=1;            //结构体变量some_data的成员变量my_msg_type赋初值为1
 strcpy(some_data.msg_text,buffer);  //将buffer的内容复制到some_date.msg_text中去

 /*下面:如果消息创建成功,发送大小为MAX_TEXT的some_data结构体变量的msgid消息队列这个描述符 */
 if((msgsnd(msgid,(void *)&some_data,MAX_TEXT,0))==-1)
 {
     perror("msgsnd");             //发送失败时则打印错误的信息
     exit(EXIT_FAILURE);           //异常退出
 }

 if(strncmp(buffer,"end",3)==0)   //只比较字符串前面3个字符buffer和end等于0时,执行下面
 {
     running=0;                   //把零赋给running.
 }
    }
    return 0;                           //返回零
}
 

原创粉丝点击