• 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;
    }

  • 相关阅读:
    尚硅谷-JVM-内存和垃圾回收篇(P1~P203)
    一起Talk Android吧(第五百五十三回:解析Retrofit返回的数据)
    Vue3从零开始——掌握setup、ref和reactive函数的奥秘
    VM设置共享文件夹方法
    Allegro172版本DFM规则之DFA spacing
    「网络编程」网络层协议_ IP协议学习_及深入理解
    python项目实战——银行取款机系统(四)
    AWS SAA-C03 #113
    计算机等级考试—信息安全三级真题八
    C++ 文件操作
  • 原文地址:https://blog.csdn.net/weixin_52839062/article/details/133588153