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

📄 fifo.c

📁 嵌入式linux的一个cgi网站
💻 C
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

#include "fifo.h"
#include "sysconf.h"

int open_read_fifo()
{

	char fifo_name[MAX_FILE_NAME_LEN];
	int r_fd;

	memset(fifo_name, 0, MAX_FILE_NAME_LEN);
	sprintf(fifo_name, "/tmp/fifo%d", getpid());
	//printf("fifo file : %s\n",fifo_name);
	if((mkfifo(fifo_name, O_CREAT|O_EXCL)<0) && (errno!=EEXIST))
			DEBUGMSG(1, ("cannot create %s\n", fifo_name));		
	r_fd = open(fifo_name, O_RDONLY|O_NONBLOCK,0);
	if(r_fd == -1)
	{	
		DEBUGMSG(1, ("open read error\n"));
		return -1;	
	}

	return r_fd;
}


void close_read_fifo()
{
	char fifo_name[MAX_FILE_NAME_LEN];

	memset(fifo_name, 0, MAX_FILE_NAME_LEN);
	sprintf(fifo_name, "/tmp/fifo%d", getpid());
	
	if(0 != unlink(fifo_name) )
		{
         printf("unable to delete fifo file ,error: %s \n",strerror(errno));
		}
	    else{
         // printf("successed to delete fifo file %s\n",fifo_name);	
         }
}


int read_fifo(int r_fd)
{
	int i = 0;
	fd_set file_set;	
	struct timeval delay_time;
	char r_buf[MAX_CMD_LEN];
	int maxfd;
	int result;

	int ret_size;

	while(1)
//	while(i<READ_FIFO_DELAY_TIME)                                    //change READ_FIFO_DELAY_TIME if necessary	
	{		
		FD_ZERO(&file_set);		
		delay_time.tv_sec = 0;
		delay_time.tv_usec = 50000;
		FD_SET(r_fd, &file_set);
		maxfd = r_fd + 1;				
		select(maxfd, &file_set, NULL, NULL, &delay_time);
		if(FD_ISSET(r_fd, &file_set))
		{
			ret_size = read(r_fd, r_buf, FIFO_PAGE_SIZE);
			if(ret_size > 0)
			{
				result = atoi(r_buf);
				return result;
			}
		}
		i++;	
	}
	return 0;
}


int  open_write_fifo()
{
	int w_fd;
	
	w_fd = open(CGI_TO_MAIN_FIFO, O_WRONLY|O_NONBLOCK, 0);
	if(w_fd == -1)
		if(errno == ENXIO)
			DEBUGMSG(1, ("open error; no reading process\n"));

	return w_fd;
}

void close_write_fifo(int w_fd)
{
	close(w_fd);
}


int notify_config(int w_fd)
{
	char cmd_str[MAX_CMD_LEN];
	int ret_size;

	memset(cmd_str, 0, MAX_CMD_LEN);
	sprintf(cmd_str, "%d\n", getpid());
	ret_size = write(w_fd, cmd_str, strlen(cmd_str));

	return ret_size;
}


int send_cmd(int w_fd, int cmd)
{
	char cmd_str[MAX_CMD_LEN];
	int ret_size;
	
	memset(cmd_str, 0, MAX_CMD_LEN);
	sprintf(cmd_str, "0 %d %d\n", cmd, getpid());
	ret_size = write(w_fd, cmd_str, strlen(cmd_str));

	return ret_size;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -