⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fifo交互流程.txt

📁 嵌入式linux的一个cgi网站
💻 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 + -