简单的消息队列实例
来源:互联网 发布:双板挑选 知乎 编辑:程序博客网 时间:2024/04/26 11:10
服务端程序
**1.smd.h**#ifndef UPGRADE_H#define UPGRADE_H#define MSG_MAX_SIZE (24)enum { HTTP_TYPE_UPLOAD = 0x0, HTTP_TYPE_DOWNLOAD};typedef struct _DownloadInfo{ char download_url[128]; char save_path[32]; char save_name[32];}DownloadInfo;enum { MSG_START_UPGRADE = 0x01, MSG_STOP_UPGRADE};struct msgbuf{ long msg_type; char msg_text[MSG_MAX_SIZE];};enum{ MSG_TYPE_START_WIFIDOG_SETUP = 0x01, MSG_TYPE_START_UPGRADE = 0x02, MSG_TYPE_START_PING_SVR_IP = 0x03};#endif**2.Makefile**EXEC = smdOBJS = main.o#CFLAGS += -L$(ROOTDIR)/user/openssl-0.9.8e -L.CFLAGS += -L$(ROOTDIR)/lib/libnvram -lnvram -I$(ROOTDIR)/lib/libnvramall: $(EXEC).c.o: $(CC) -c $(CFLAGS) $<$(EXEC): $(OBJS) $(CC) $(OBJS) $(CFLAGS) -o $@romfs: $(ROMFSINST) /bin/smdclean: -rm -f $(EXEC) *.elf *.o**3.main.c**#include <stdio.h>#include <stdlib.h>#include <string.h>#include <linux/reboot.h>#include <sys/stat.h> #include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include "smd.h"#include "nvram.h"int main(int argc, char *argv[]){ int msg_id = 0; key_t key; struct msgbuf msg_buf; int nBytes = 0; key = ftok("/dev/null", 'u'); msg_id = msgget(key, IPC_CREAT|0666); if (msg_id < 0) { printf("msgget failed\n"); return -1; } while(1) { memset(&msg_buf, 0x0, sizeof(msg_buf)); msgrcv(msg_id, &msg_buf, MSG_MAX_SIZE, 0, IPC_NOWAIT); if (nBytes >= 0) { switch (msg_buf.msg_type) { case MSG_TYPE_START_WIFIDOG_SETUP: nvram_commit(RT2860_NVRAM); nvram_commit(RT2860_BAK); system("vwanip.sh"); system("wifimonitor.sh"); break; case MSG_TYPE_START_PING_SVR_IP: { char command[64] = {0x0}; snprintf(command, sizeof(command), "ping %s -c 5", msg_buf.msg_text); system(command); } break; case MSG_TYPE_START_UPGRADE: break; default: break; } } } return 0; }
客户端程序:
/****/int msg_id = 0;key_t key;struct msgbuf msg_buf;memset(&msg_buf, 0x0, sizeof(msg_buf));msg_buf.msg_type = MSG_TYPE_START_WIFIDOG_SETUP;if (msgsnd(msg_id, (void *)&msg_buf, 0, 0) < 0) { return -1;}/****/if (!strcmp(svr_cmd, CMD_DO_PING)) { /* start do the ping action */ memset(&msg_buf, 0x0, sizeof(msg_buf)); msg_buf.msg_type = MSG_TYPE_START_PING_SVR_IP; strncpy(msg_buf.msg_text, svr_ip, sizeof(msg_buf.msg_text)); if (msgsnd(msg_id, (void *)&msg_buf, sizeof(msg_buf.msg_text), 0) < 0) { ret = -1; }}
0 0
- 简单的消息队列实例
- 【消息队列】ActiveMQ的简单实例 - 生产者消费者模式
- Java消息队列--ActiveMq简单实例
- 消息队列的简单处理
- 消息队列的简单实现
- redis简单的消息队列
- 消息队列MSMQ的使用实例
- .Net消息队列MSMQ的使用实例
- 消息队列MSMQ的使用实例
- Linux 进程间通信(posix消息队列 简单)实例
- 消息队列编程实例
- linux 消息队列 实例
- linux 消息队列 实例
- linux 消息队列实例
- 消息队列应用实例
- linux消息队列实例
- linux 消息队列实例
- linux 消息队列实例
- jvm系列一:jvm结构
- 在actionbar添加分享功能
- View的draw过程
- leetcode 27. Remove Element
- 负margin用法权威指南
- 简单的消息队列实例
- 队列
- Shell中条件判断if中的各种参数的意思
- Spring事务的传播特性和隔离级别
- js两个时间的计算得出最后的天数
- Javascript笔记——Javascript数据类型转换
- mysql 5.5.45 升级至5.7.13 配置升级表空间分配
- 数据库原理(八)--数据存储与索引
- 事件分发机制