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

  • 相关阅读:
    【原创】java+swing+mysql通讯录管理系统设计与实现
    leetcode_98复原IP地址
    方舟生存进化服务器怎么开?方舟生存进化架设服务器教程
    【附源码】计算机毕业设计JAVA沙县小吃点餐系统
    Flutter的Constructors for public widgets should have a named ‘key‘ parameter警告
    使用 JavaScript 切换全屏模式
    领域事件和集成事件没那么高大上
    js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)
    如何做好水库大坝实时安全监测
    torch.where()两种用法
  • 原文地址:https://blog.csdn.net/weixin_52839062/article/details/133588153