资源简介
FIFO配合管道PIPE,实现FIFO传递数据,PIPE触发epoll,异步IO效果

代码片段和文件信息
#include “stdafx.h“
#include
#include
#include “fifo.h“
static int sl_fifo_Cnt = 0;
C_fifo::C_fifo()
{
m_Capacity = 0;
m_NodeSize = 0;
m_Fd = -1;
m_Head = NULL;
m_Tail = NULL;
m_p_NodeList = NULL;
m_p_pipe = NULL;
m_Node.p_next = NULL;
m_Node.p_data = NULL;
m_Node.v_size = 0;
}
C_fifo::~C_fifo()
{
uninit();
if (NULL != m_p_pipe)
{
delete m_p_pipe;
m_p_pipe = NULL;
}
}
int C_fifo::init(unsigned int vp_MaxNode unsigned int vp_NodeSize const char* pp_PipeName)
{
char al_fifoname[64];
char* pl_fifoname = NULL;
unsigned int i;
unsigned int vl_OldCapacity;
vl_OldCapacity = m_Capacity;
m_Capacity = vp_MaxNode;
m_NodeSize = vp_NodeSize;
m_Fd = 0;
if(NULL != m_p_NodeList)
{
for (i = 0; i < vl_OldCapacity + 1; i++)
{
if(NULL != m_p_NodeList[i].p_data)
{
delete m_p_NodeList[i].p_data;
}
}
delete m_p_NodeList;
m_p_NodeList = NULL;
}
if(NULL != m_Node.p_data)
{
delete m_Node.p_data;
m_Node.p_data = NULL;
}
m_p_NodeList = new FifoNode[m_Capacity + 1];
if (NULL == m_p_NodeList)
{
printf(“new fifo node fail\n“);
return -1;
}
for (i = 0; i < m_Capacity + 1; i++)
{
m_p_NodeList[i].v_size = 0;
m_p_NodeList[i].p_data = ( char* )new char[m_NodeSize];
if (NULL == m_p_NodeList[i].p_data)
{
printf(“new fifo node data fail\n“);
return -1;
}
if (i < m_Capacity)
{
m_p_NodeList[i].p_next = &m_p_NodeList[i + 1];
}
else
{
m_p_NodeList[m_Capacity].p_next = &m_p_NodeList[0];
}
}
m_Node.p_data = ( char* )new char[m_NodeSize];
if (NULL == m_Node.p_data)
{
printf(“new fifo data node fail\n“);
return -1;
}
m_Head = &m_p_NodeList[0];
m_Tail = &m_p_NodeList[0];
if (NULL == pp_PipeName)
{
sprintf(al_fifoname “/tmp/fifo%d“ sl_fifo_Cnt);
pl_fifoname = al_fifoname;
}
else
{
pl_fifoname = (char*)pp_PipeName;
}
m_p_pipe = new C_pipe(pl_fifoname);
if (NULL == m_p_pipe)
{
printf(“new pipe fail\n“);
return -1;
}
return 0;
}
int C_fifo::uninit()
{
unsigned int i;
for (i = 0; i < m_Capacity + 1; i++)
{
if (m_p_NodeList != NULL)
{
if (m_p_NodeList[i].p_data != NULL)
{
delete m_p_NodeList[i].p_data;
m_p_NodeList[i].p_data = NULL;
}
}
}
if (m_p_NodeList != NULL)
{
delete m_p_NodeList;
m_p_NodeList = NULL;
}
if (m_Node.p_data != NULL)
{
delete m_Node.p_data;
m_Node.p_data = NULL;
}
m_Capacity = 0;
m_NodeSize = 0;
m_Head = NULL;
m_Tail = NULL;
return 0;
}
void C_fifo::print_node()
{
unsigned int i = 0;
printf(“---node: %p---\n“ m_p_NodeList);
printf(“---pipe: %p---\n“ m_p_pipe);
if (NULL != m_p_NodeList)
{
for (i = 0; i < m_Capacity + 1; i++)
{
//printf(“node[%d]: %p “ i m_p_NodeList[i].p_data);
}
}
}
int C_fifo::get_fd()
{
int vl_ret = -1;
if (NULL != m_p_p
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6968 2016-10-09 14:37 fifo\fifo.cpp
文件 1050 2016-03-31 18:32 fifo\fifo.h
文件 2688 2016-10-09 14:37 fifo\pipe.cpp
文件 956 2016-10-09 14:37 fifo\pipe.h
目录 0 2016-10-09 14:37 fifo
----------- --------- ---------- ----- ----
11662 5
- 上一篇:OAF 客户化开发之FTP服务器文件开发
- 下一篇:组态王工程-PID控件例程
相关资源
- 周立功开发板ProASIC3实验-syn_FIFO代码
- SIM908 SDIO FSMC STM32 FIFO
- OV7670无fifo模块资料及stm32程序
- 操作系统实现请求分页存储管理页面
- USB2.0芯片cy68013高速bulk传输slave fifo模
- 带FIFO模块的OV7670的STM32测试程序
- xilinx fifo ip核文档说明
- ov7670带fifo的stm32f4程序
- 页面置换算法FIFO,LRU,NRU,OPT
- xilinx 官方fifo IP使用手册
- xilinxFIFO_IP核的datasheet
- FPGA+USB68013+SLAVEFIFO+SDRAM+FIFO
- OV7670中文数据手册无FIFO
- 操作系统课设 分页式存储管理内含
- STM32F103ZET6+FreeRTOS V8.2.3+kfifo巧夺天工
- Verilog实现的FIFO模型
- OV7725摄像头+FIFOAL422B 模块,只要是个
- FIFO设计原理,有异步同步fifo
- 异步fifo设计verilog源代码
- slave fifo 上位机程序
- STM32CUBE_DCMI_DMA_OV7670(无FIFO)_UART_PI
- 基于Nexys4 DDR的FPGA串口模块,带缓冲
- 无FIFO摄像头 DMA传送关闭DMA中断.zip
- 基于verilog的带fifo的串口设计
- zcu102用PL读写DDR4
- Altera FIFO开发资料
- FIFO_delay.rar
- STM32上实现12864液晶二维码的显示,
- linux管道通信例程
- 页面置换算法FIFO:先进先出 NUR: 最近
评论
共有 条评论