基于ARM的智能灯光控制系统(6)进程通信
来源:互联网 发布:功夫茶 知乎 编辑:程序博客网 时间:2024/04/28 11:23
基于ARM的智能灯光控制系统(6)进程通信
进程通信的作用
.
进程通信机制
进程通信头文件(sys_ipc.h)
.
#ifndef _SL2000_SYS_IPC_H#define _SL2000_SYS_IPC_H#include "config.h"#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/msg.h>void* ipcs_pro(void* arg);int get_msgid_web(void);int msg_recv_webreq(int msgid);void* set_web_shm(void);int shm_to_stu(const struct sys_all* shm_dev);int stu_to_shm( struct sys_all* shm_dev);
进程通信实现文件(sys_ipc.c)
#include "sys_ipc.h"#include "config.h"#include "link_pro.h"extern struct sys_all g_dev[1]; extern struct sys_dev *head_node;int area_update_flag;void* ipcs_pro(void* arg){ int msgid_web; struct sys_all* shm_dev=NULL; int i,cmd; printf("ipcs pthread start...\n"); if((msgid_web=get_msgid_web()) < 0){ printf("msg_web error\n"); exit(1); } if((shm_dev=(struct sys_all*)set_web_shm())==NULL){ printf("shm_web error\n"); exit(1); } stu_to_shm(shm_dev); while(1){ cmd = msg_recv_webreq(msgid_web); switch(cmd){ case 1://网页更新0x01 stu_to_shm(shm_dev); break; case 2://设置更新0x02 shm_to_stu(shm_dev); save_dev(g_dev); head_node = stu_to_link(head_node); area_update_flag = 1; break; default: break; } sleep(2); }}int get_msgid_web(void){ int id = -1; id = msgget((key_t)1234,0666|IPC_CREAT); if(id == -1){ printf("msgget error\n"); exit(1); } return id;}int msg_recv_webreq(int msgid){ int i,ret; long int msg_type; struct st_msg_req cmd; msg_type = WEB_UPDATE_SMG_INDEX; if(msgrcv(msgid,(void*)&cmd,1,msg_type,IPC_NOWAIT)==-1){ return -1; }else{ //if(cmd.req==0x1) ret = cmd.req; printf("recv %d cmd...\n",ret); return ret; } return 0; }void* set_web_shm(void){ int shmid; void* shmaddr=(void*)0; if((shmid=shmget((key_t)1122,sizeof(struct sys_all),0666|IPC_CREAT))<0){ return NULL; }else{ if((shmaddr=shmat(shmid,(void*)0,0))==(char *)-1){ return NULL; } } printf("set shm ok...\n"); return shmaddr;}int stu_to_shm( struct sys_all* shm_dev){ int i; if(shm_dev==NULL) return -1; memcpy(shm_dev,g_dev,sizeof(struct sys_all)); return 0;}int shm_to_stu(const struct sys_all* shm_dev){ int i; if(shm_dev==NULL) return -1; memcpy(g_dev,shm_dev,sizeof(struct sys_all)); return 0; }
0 0
- 基于ARM的智能灯光控制系统(6)进程通信
- 基于ARM的智能灯光控制系统(1)项目介绍
- 基于ARM的智能灯光控制系统(2)需求分析
- 基于ARM的智能灯光控制系统(3)驱动开发
- 基于ARM的智能灯光控制系统(4)数据结构
- 基于ARM的智能灯光控制系统(7)设备更新
- 基于ARM的智能灯光控制系统(8)设备添加
- 基于ARM的智能灯光控制系统(9)设备管理
- 基于ARM的智能灯光控制系统(10)网络节点
- 基于ARM的智能灯光控制系统(11)状态更新
- 基于ARM的智能灯光控制系统(5)设备链表
- [转]基于RS-485总线的智能灯光控制系统
- 基于arduino和蓝牙通信的智能窗户控制系统
- LED灯光控制系统--基于WIZ610wi
- 基于Android智能终端的远程控制系统
- 基于Android智能终端的远程控制系统
- 基于QT4的智能温度采集控制系统
- 基于树莓派的定时智能豆浆机控制系统
- Gulp的配置文件gulpfile.babel.js
- 第16课:div在排版中的作用
- jsp页面下载java工程中已经有的excel模板
- web前端-JavaScript 使用误区 -024
- 数据库系统的三级模式结构
- 基于ARM的智能灯光控制系统(6)进程通信
- 安卓SQLite的增删改查
- 调用系统拍照或相册功能获取裁剪以后的图片
- Python查漏补缺
- IFrame安全问题解决办法(跨框架脚本(XFS)漏洞)
- JAVA中如何调用matlab并返回运算结果?
- XFS_文档篇_第一节
- RTMP协议分析及H.264打包原理
- 文章标题