資源簡介
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? {
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_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_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? {
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? {
//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控件例程
評論
共有 條評論