• 9.30作业


    #include
     
    //消息结构体
    typedef struct
    {
        long msgtype;     //消息类型
        char data[128];    //消息正文
    }Msg_ds;
     
    #define SIZE sizeof(Msg_ds)-sizeof(long)       //正文大小
     
    //定义线程体
    void *task(void *arg)
    {
        //创建key值
        key_t key;
        if((key=ftok("/",'k'))==-1)
        {
            perror("ftok error");
            return NULL;
        }
     
        //创建消息队列
        int msgid;
        if((msgid=msgget(key,IPC_CREAT|0664))==-1)
        {
            perror("msgget error");
            return NULL;
        }
     
        //从消息队列中取数据
        Msg_ds msg;
     
        while(1)
        {
            //从消息队列中取数据
            if(msgrcv(msgid,&msg,SIZE,200,0)==-1)
            {
                perror("msgsnd error");
                return NULL;
            }
     
            if(strcmp(msg.data,"quit")==0)
            {
                break;
            }
     
            printf("rcv:%s\n",msg.data);
        }
     
        //退出线程
        pthread_exit(NULL);
    }
        
        
     
    int main(int argc, const char *argv[])
    {
        //创建key值
        key_t key;
        if((key=ftok("/",'k'))==-1)
        {
            perror("ftok error");
            return -1;
        }
     
        //创建消息队列
        int msgid;
        if((msgid=msgget(key,IPC_CREAT|0664))==-1)
        {
            perror("msgget error");
            return -1;
        }
     
        //创建子线程
        pthread_t tid;
        if(pthread_create(&tid,NULL,task,NULL))
        {
            printf("子线程创建失败\n");
            return -1;
        }
     
        //向消息队列中发送数据
        Msg_ds msg={.msgtype=100};
     
        while(1)
        {
            printf("请输入消息内容: ");
            fgets(msg.data,sizeof(msg.data),stdin);     //从终端输入字符串
     
            //将字符串的'\n'换成'\0'
            msg.data[strlen(msg.data)-1]='\0';
     
            //将消息发送到消息队列中
            if(msgsnd(msgid,&msg,SIZE,0)==-1)
            {
                perror("msgsnd error");
                return -1;
            }
     
            if(strcmp(msg.data,"quit")==0)
            {
                break;
     
            }
        }
     
        //回收线程资源
        pthread_join(tid,NULL);
     
        //删除消息队列
        msgctl(msgid,IPC_RMID,NULL);
     
     
        return 0;
    }

    #include
     
    //消息结构体
    typedef struct
    {
        long msgtype;     //消息类型
        char data[128];    //消息正文
    }Msg_ds;
     
    #define SIZE sizeof(Msg_ds)-sizeof(long)       //正文大小
     
    //定义线程体
    void *task(void *arg)
    {
        //创建key值
        key_t key;
        if((key=ftok("/",'k'))==-1)
        {
            perror("ftok error");
            return NULL;
        }
     
        //创建消息队列
        int msgid;
        if((msgid=msgget(key,IPC_CREAT|0664))==-1)
        {
            perror("msgget error");
            return NULL;
        }
     
        //向消息队列中发送数据
        Msg_ds msg={.msgtype=200};
     
        while(1)
        {
            printf("请输入消息内容: ");
            fgets(msg.data,sizeof(msg.data),stdin);     //从终端输入字符串
     
            //将字符串的'\n'换成'\0'
            msg.data[strlen(msg.data)-1]='\0';
     
            //将消息发送到消息队列中
            if(msgsnd(msgid,&msg,SIZE,0)==-1)
            {
                perror("msgsnd error");
                return NULL;
            }
     
            if(strcmp(msg.data,"quit")==0)
            {
                break;
     
            }
        }
     
        //退出线程
        pthread_exit(NULL);
     
    }
     
     
     
    int main(int argc, const char *argv[])
    {
        //创建key值
        key_t key;
        if((key=ftok("/",'k'))==-1)
        {
            perror("ftok error");
            return -1;
        }
     
        //创建消息队列
        int msgid;
        if((msgid=msgget(key,IPC_CREAT|0664))==-1)
        {
            perror("msgget error");
            return -1;
        }
     
        //创建子线程
        pthread_t tid;
        if(pthread_create(&tid,NULL,task,NULL))
        {
            printf("子线程创建失败\n");
            return -1;
        }
     
        //从消息队列中取数据
        Msg_ds msg;
     
        while(1)
        {
            //从消息队列中取数据
            if(msgrcv(msgid,&msg,SIZE,100,0)==-1)
            {
                perror("msgsnd error");
                return -1;
            }
     
            if(strcmp(msg.data,"quit")==0)
            {
                break;
            }
     
            printf("rcv:%s\n",msg.data);
        }
     
        //回收线程资源
        pthread_join(tid,NULL);
     
        //删除消息队列
        msgctl(msgid,IPC_RMID,NULL);
     
     
        return 0;
    }

  • 相关阅读:
    数据库名词解析
    Centos8安装CDH解决不兼容问题
    闲鱼的商品结构化是如何演进的
    【面试题总结】分布式锦集
    A child container failed during start之解决方法
    蓝桥等考Python组别十二级002
    Flask 学习-26.JWT(JSON Web Token)生成Token
    C语言:贪吃蛇游戏(万字解读超详细)
    【神经网络】Python基于numpy灵活定义神经网络结构的方法
    [附源码]Python计算机毕业设计Django基于Vue的社区拼购商城
  • 原文地址:https://blog.csdn.net/weixin_52839062/article/details/133588153