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

📄 blacklist.cpp

📁 联通的短信网关平台。 sp 使用。 如果想自己用vc 开发短信业务
💻 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 + -