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

📄 oamtask.cc

📁 对POSIX timer的面向对象的封装。
💻 CC
字号:
#include "oamTask.h"#include <unistd.h>#include <string.h>#include <stdio.h>#include <errno.h>CommonData::CommonData():length_m(0) , rawData_m(0) {}CommonData::CommonData(char * rawData , int length)            :length_m(length) , rawData_m(rawData) {}CommonData::~CommonData(){  rawData_m = 0;  length_m = 0;}int CommonData::getLength() const{  return length_m;}void CommonData::setLength(int length){  length_m = length;}char * CommonData::getData() const{  return rawData_m;}void CommonData::setData(char * rawData){  rawData_m = rawData;}OamTask::OamTask(){  queue_m[FD_READ] = -1;  queue_m[FD_WRITE] = -1;}OamTask::~OamTask(){  if (queue_m[FD_READ] != -1)  {    close(queue_m[FD_READ]);    queue_m[FD_READ] = -1;  }  if (queue_m[FD_WRITE] != -1)  {    close(queue_m[FD_WRITE]);    queue_m[FD_WRITE] = -1;  }}int OamTask::initialize(){  if (pipe(queue_m) == -1)  {    return -1;  }  return 0;}int OamTask::putq(CommonData & commonData){  int length = commonData.getLength();  char * data = commonData.getData();  if (length <= 0 || data == 0)  {    perror("the length or the data ptr is equal with 0.");    return -1;  }  if (write(queue_m[FD_WRITE] , &length , sizeof(int)) != sizeof(int))  {    if (errno == EINTR)    {      return 0;    }	    perror("write syscall failed.");    return -1;  }  if (write(queue_m[FD_WRITE] , data , length) != length)  {    if (errno == EINTR)    {      return 0;    }	    perror("write syscall failed.");    return -1;  }    return 0;  }int OamTask::getq(CommonData & commonData){  int length = 0;  if (read(queue_m[FD_READ] , &length , sizeof(int)) != sizeof(int))  {    if (errno == EINTR)    {      return 0;    }	    perror("read syscall failed.");    return -1;  }  if (length <= 0)  {    perror("the length is less and equal than 0.");    return -1;  }  char * data = new char[length];  memset(data , 0x00 , length);  if (read(queue_m[FD_READ] , data , length) != length)  {	if (errno == EINTR)	{	  return 0;	}	perror("read syscall failed.");        return -1;  }  commonData.setLength(length);  commonData.setData(data);  return 0;}int OamTask::handle(CommonData * pData){  return 0;}int OamTask::run(){  while (isRunning())  {    CommonData commonData;    if (getq(commonData) == -1)    {      perror("getq failed.");      return -1;    }    if (handle(&commonData) == -1)    {      char * data = commonData.getData();      delete [] data;      data = 0;	  perror("handle failed.");      return -1;    }    char * data = commonData.getData();	if (data)	{      delete [] data;      data = 0;    }  }    return 0;}

⌨️ 快捷键说明

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