📄 blacklist.cpp
字号:
// BlackList.cpp: implementation of the CBlackList class.
//
//////////////////////////////////////////////////////////////////////
//#include "stdafx.h"
#include "BlackList.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <io.h>
#include <fcntl.h>
#include <iostream.h>
#include <error.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
const int g_nTableSize = 10000;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBlackList::CBlackList()
{
memset(&m_cFileName, 0, sizeof(m_cFileName));
m_nHandle = -1;
m_pSrc = NULL;
m_nBufSize = 0;
}
CBlackList::~CBlackList()
{
if (m_pSrc != NULL)
delete [] m_pSrc;
if (m_nHandle > 0)
{
close(m_nHandle);
m_nHandle = -1;
}
}
int CBlackList::InitBlackList(char *pFile)
{
if (pFile == NULL)
return -1;
SetSrcFile(pFile);
if (InitList() != 0)
{
cout << "InitBlackList() error!" << endl;
return -1;
}
if (!CreateHashTable())
{
cout << "CreateHashTable() error!" << endl;
return -1;
}
return 0;
}
int CBlackList::InitList(void)
{
if (m_pSrc != NULL)
{
delete [] m_pSrc;
m_pSrc = NULL;
}
if (m_nHandle > 0)
{
close(m_nHandle);
m_nHandle = -1;
}
if (strlen(m_cFileName) == 0)
{
cout << "pls select src file first!" <<endl;
return -1;
}
m_nHandle = open((char *)&m_cFileName, O_RDONLY);
if (m_nHandle < 0)
{
cout << "open file error!" << m_cFileName <<endl;
return -1;
}
m_nBufSize = lseek(m_nHandle, 0, SEEK_END);
m_pSrc = new char[m_nBufSize + 1];
if (m_pSrc == NULL)
{
cout << "apply memory error!"<<endl;
close(m_nHandle);
m_nHandle = -1;
return -1;
}
memset(m_pSrc, 0, (m_nBufSize+1));
int nReadLen = 0;
int nLeft = m_nBufSize - nReadLen;
char *pTemp = NULL;
pTemp = m_pSrc;
lseek(m_nHandle, 0, SEEK_SET);
while (nLeft > 0)
{
nReadLen = 0;
if ((nReadLen = read(m_nHandle, pTemp, nLeft)) < 0)
{
if (errno == EINTR)
continue;
cout << "read from file error!"<<endl;
close(m_nHandle);
m_nHandle = -1;
delete [] m_pSrc;
m_pSrc = NULL;
m_nBufSize = 0;
return -1;
}
//if ((nReadLen == 0) && (eof(m_nHandle)))
if (nReadLen == 0)
break;
pTemp += nReadLen;
nLeft -= nReadLen;
//lseek(m_nHandle, (m_nBufSize-nLeft), SEEK_SET);
}
//cout << "src mobile:\n" << m_pSrc << endl;
cout << "InitList succeed!"<<endl;
close(m_nHandle);
m_nHandle = -1;
return 0;
}
void CBlackList::SetSrcFile(char *pFile)
{
if (pFile != NULL)
strcpy((char *)&m_cFileName, pFile);
return;
}
#ifdef __DEBUG__
int g_nTotal=0;
#endif
bool CBlackList::CreateHashTable(void)
{
char cHashStr[20];
char *pBase = NULL;
char *pTemp = NULL;
SetHashSize((unsigned long)g_nTableSize);
pBase = m_pSrc;
int i=0;
while (pBase <= (m_pSrc + m_nBufSize))
{
while ((*pBase > '9') || (*pBase < '0'))
{
pBase++;
i++;
if (pBase > (m_pSrc + m_nBufSize))
break;
}
if (pBase > (m_pSrc + m_nBufSize))
break;
pTemp = pBase;
while ((*pTemp <= '9') && (*pTemp >= '0'))
{
if (pTemp > (m_pSrc + m_nBufSize))
break;
pTemp++;
i++;
}
memset((char *)&cHashStr, 0, sizeof(cHashStr));
if (pBase < pTemp)
{
memcpy(&cHashStr, pBase, (pTemp - pBase));
#ifdef __DEBUG__
g_nTotal++;
cout << cHashStr << "\t" << g_nTotal << endl;
#endif
this->InsData((char *)&cHashStr);
}
pBase = pTemp+1;
i++;
}
#ifdef __DEBUG__
cout << "File Len =" << m_nBufSize << "\t i=" << i <<endl;
#endif
delete [] m_pSrc;
m_pSrc = NULL;
m_nBufSize = 0;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -