📄 fifo交互流程.txt
字号:
1. cgi进程与主进程之间的交互
各cgi进程与主进程通过fifo方式进行进程间交互。
主进程在启动时首先建立一个读fifo,文件名为"/tmp/cgi_to_main",代码如下:
/**********************************************************************************************
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#define CGI_TO_MAIN_FIFO "/tmp/cgi_to_main"
//建立fifo
if((mkfifo(CGI_TO_MAIN_FIFO, O_CREAT|O_EXCL)<0) && (errno!=EEXIST))
printf("cannot create CGI_TO_MAIN_FIFO\n");
//打开fifo,此fd可以用select进行处理,用read来读取fifo中的数据
fd = open(CGI_TO_MAIN_FIFO, O_RDONLY|O_NONBLOCK,0);
if(fd==-1)
{
printf("open read error\n");
exit();
}
//读取fifo中的数据, r_size是一个预设值,建议为4096,ret_size为发送进程实际发送的值(只要该值小于4096,可以
//一次读到, 不会产生多个进程发送过来数据的串扰)
ret_size = read(fd, r_buf, r_size);
//关闭及删除fifo
unlink(CGI_TO_MAIN_FIFO);
***********************************************************************************************/
cgi进程直接读 系统配置文件,来显示当前的系统参数。 (系统文件的文件名和路径是什么?)
cgi进程在需要配置参数时,首先将要配置的参数存入临时配置文件(见2), 然后将pid以字符串的形式通过写fifo
发送给主进程。 主进程设置完毕后,将结果存入 系统配置文件 中,然后发送结果给cgi进程(通过cgi进程建立的fifo,
fifo的名称为/tmp/fifoXXX(XXX为cgi进程的pid))。 如果成功,返回字符串“1”,否则返回字符串“0”。写fifo的代码如下:
/**********************************************************************************************
w_fd = open("/tmp/fifoXXX", O_WRONLY|O_NONBLOCK, 0); //写时只需open,无需mkfifo及unlink(这些由read方完成)
if(w_fd == -1)
if(errno == ENXIO)
printf("open error; no reading process\n");
real_wnum = write(w_fd, w_buf, len); //len为w_buf的长度,不要超过4096
//write完, close(w_fd)即可
***********************************************************************************************/
而当cgi进程要控制云台,无需修改配置文件时,直接通过fifo发送命令给主进程,命令格式为:
0 cmd pid
其中cmd为特定的cmd,如下:
云台左: 100
云台右: 101
云台上: 102
云台下: 103
云台居中: 104
云台左右巡航:105 //这两个命令对于主程序翻转其开/关状态即可,默认为关
云台上下巡航:106
恢复出厂设置:107
加入pid是为了以防万一,留作扩展?
2. 临时配置文件名为/tmp/changeXXX, XXX为相应cgi进程的pid, 原来文档里定为(.cfg), 我觉得.cfg有点多余,还增加了一个strcat的操作,最好就不要了?
临时文件里的格式为:
LEN
NO=DATA
...
NO=DATA
其中,LEN始终在第一行,为这个临时文件中一共要配置的参数个数,
NO为参数的编号(对应于“配置参数列表v0(1).976-20070804.xls”), NO编号从 1 开始,
DATA为实际的值,NO和DATA均以字符串形式给出。
"="左右都没有空格,直接和NO,DATA相连。
每一项NO=DATA占一行。
q1. 系统文件的文件名和路径是什么? /etc/cfg/config.ini
q2. 是否在cmd中加入pid? 是, 格式为0 cmd pid\n
q3. 临时配置文件名? 就按上面的来
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -