• 【day9.30】消息队列实现进程间通信


    write.c

    linux@linux:~/23062/930$ cat write.c 
    #include
    
    #define ERR_MSG(msg)  do{\
        fprintf(stderr, "__%d__:", __LINE__); \
        perror(msg);\
    }while(0)
    
    typedef struct
    {
    	long msgtype; 	//消息类型
    	char data[1024]; 	//消息正文
    }Msg_s;
    
    #define SIZE sizeof(Msg_s)-sizeof(long) 	//消息正文的大小
    
    int main(int argc, const char *argv[])
    {
    	key_t key; 		//定义一个键值
    	if((key=ftok("./",'t'))==-1) 	//创建键值并判断是否创建成功
    	{
    		ERR_MSG("ftok");
    		return -1;
    	}
    
    	int msgid; 		//接收消息队列
    	if((msgid=msgget(key,IPC_CREAT|0664))==-1) 	//创建消息队列并判断是否创建成功
    	{
    		ERR_MSG("msgget");
    		return -1;
    	}
    	Msg_s msg = {.msgtype = 100}; //定义消息队列结构体并确定消息类型
    
    	//向消息队列中发送数据
    	while(1)
    	{
    		//从终端获取数据
    		printf("请输入消息内容:");
    		fgets(msg.data,sizeof(msg.data),stdin);
    
    		//将数据中的换行改成'\0'
    		msg.data[strlen(msg.data)-1] = 0;
    
    		//发送消息并判断是否发送成功
    		if(msgsnd(msgid,&msg,SIZE,0) == -1)
    		{
    			ERR_MSG("msgsnd");
    			return -1;
    		}
    
    		//比较数据,看是否要退出
    		if(strcmp(msg.data,"quit") == 0)
    		{
    			break;
    		}
    	}
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    read.c

    linux@linux:~/23062/930$ cat read.c 
    #include
    
    #define ERR_MSG(msg)  do{\
        fprintf(stderr, "__%d__:", __LINE__); \
        perror(msg);\
    }while(0)
     
    typedef struct
    {
    	long msgtype; 		//消息类型
    	char data[1024]; 	//消息正文
    }Msg_s;
     
    #define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小
     
    int main(int argc, const char *argv[])
    {
    	key_t key; //定义一个键值
    	if((key = ftok("./",'t')) == -1) //创建键值并判断键值是否创建成功
    	{
    		ERR_MSG("ftok");
    		return -1;
    	}
     
    	int msgid; 	//接收消息队列
    	if((msgid = msgget(key,IPC_CREAT|0664)) == -1)  //创建消息队列并判断是否创建成功
    	{
    		ERR_MSG("msgget");
    		return -1;
    	}
     
    	Msg_s msg; //定义消息结构体
    	//从消息队列中读取数据
    	while(1)
    	{
    		//发送消息并判断是否发送成功
    		if(msgrcv(msgid, &msg, SIZE, 0, 0) == -1)
    		{
    			ERR_MSG("msgrcv");
    			return -1;
    		}
    		
    		//比较数据,看是否要退出
    		if(strcmp(msg.data,"quit") == 0)
    		{
    			break;
    		}
     
    		//打印数据
    		printf("rcv:%s\n",msg.data);
    	}
     
    	//删除消息队列
    	msgctl(msgid,IPC_RMID,NULL);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    效果图:
    效果图

  • 相关阅读:
    【机器学习】决策树为什么对缺失值不敏感,如何处理缺失值?
    量化交易全流程(一)
    vue项目中引入地图的详细教程
    Java窗体汽车租赁系统Java共享汽车租赁(租赁系统)
    迁移人大金仓问题汇总
    Pytorch-学习记录-1-Tensor
    Docker② —— Cgroups详解
    川宁生物业绩持续高涨
    Python中的异常处理4-3
    C++ 栈和典型迷宫问题
  • 原文地址:https://blog.csdn.net/kyl_posible/article/details/133435032