INT BSocketAcceptor::Init(CONST std::string &strIpAddress, CONST USHORT &usPort) { m_strIpAddress = strIpAddress; m_usPort = usPort; m_hListenSocket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); BZ_PROCESS_ERROR(INVALID_SOCKET != m_hListenSocket); INT retCode; sockaddr_in saLocalAddr; BZ_ZeroMemory(&saLocalAddr, sizeof(sockaddr_in)); saLocalAddr.sin_family = AF_INET; saLocalAddr.sin_port = htons(usPort); saLocalAddr.sin_addr.s_addr = ('\0' == strIpAddress[0] ? INADDR_ANY : ::inet_addr(m_strIpAddress.c_str())); retCode = ::bind(m_hListenSocket, (sockaddr *)(&saLocalAddr), sizeof(sockaddr_in)); BZ_PROCESS_ERROR(SOCKET_ERROR != retCode); retCode = ::listen(m_hListenSocket, BZ_MAX_BACK_LOG_NUM); BZ_PROCESS_ERROR(SOCKET_ERROR != retCode); return 0; Exit0: BZ_CloseSocket(m_hListenSocket); return ::WSAGetLastError(); }
LONG BFile::Tell() const { LONG lPos = -1; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); lPos = ftell(m_hFile); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); Exit0: return lPos; }
BOOL BFile::Flush() { BOOL bRet = FALSE; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); BZ_PROCESS_ERROR(fflush(m_hFile) == 0); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); bRet = TRUE; Exit0: return bRet; }
BOOL BFile::Close() { BOOL bRet = FALSE; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); BZ_PROCESS_ERROR(fclose(m_hFile) == 0); m_hFile = NULL; //BZ_PROCESS_ERROR(ferror(m_hFile) == 0); bRet = TRUE; Exit0: return bRet; }
LONG BFile::Write(const char* const cpcBuffer, LONG lBufferSize, LONG lWriteSize) { LONG lResult = -1; LONG lActualWriteSize = 0; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); lActualWriteSize = min(lBufferSize, lWriteSize); lResult = fwrite(cpcBuffer, 1, lActualWriteSize, m_hFile); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); Exit0: return lResult; }
LONG BFile::Read(char* const cpBuffer, LONG lBufferSize, LONG lReadSize) { LONG lResult = -1; LONG lActualReadSize = 0; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); lActualReadSize = min(lBufferSize, lReadSize); lResult = fread(cpBuffer, 1, lActualReadSize, m_hFile); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); Exit0: return lResult; }
BOOL BFile::SeekCurrent(LONG lOffset) { BOOL bRet = FALSE; int nResult = -1; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); nResult = fseek(m_hFile, lOffset, SEEK_CUR); BZ_PROCESS_ERROR(nResult == 0); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); bRet = TRUE; Exit0: return bRet; }
BOOL BFile::SeekBegin(LONG lOffset) { BOOL bRet = FALSE; int nResult = 0; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); nResult = fseek(m_hFile, lOffset, SEEK_SET); BZ_PROCESS_ERROR(nResult == 0); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); bRet = TRUE; Exit0: return bRet; }
INT BSocketAcceptor::Wait(IN HANDLE hIocp, OUT BSocketStream &skStream) { BZ_CHECK_RETURN_CODE(INVALID_HANDLE_VALUE != hIocp && NULL != hIocp, -1); skStream.Close(); skStream.UnInit(); sockaddr_in saRemoteAddr; SOCKET hRemoteSocket = INVALID_SOCKET; BOOL bRetCode = FALSE; INT nAddrLen = sizeof(struct sockaddr_in); BZ_ZeroMemory(&saRemoteAddr, nAddrLen); hRemoteSocket = ::accept(m_hListenSocket, (sockaddr *)&saRemoteAddr, &nAddrLen); BZ_PROCESS_ERROR(INVALID_SOCKET != hRemoteSocket); skStream.Init(hRemoteSocket, ::inet_ntoa(saRemoteAddr.sin_addr), saRemoteAddr.sin_port); hIocp = ::CreateIoCompletionPort((HANDLE)hRemoteSocket, hIocp, (ULONG_PTR)&skStream, 0); return 0; Exit0: if (INVALID_SOCKET == hRemoteSocket) { return ::WSAGetLastError(); } return -1; }
int _tmain(int argc, _TCHAR* argv[]) { char szBuffer[100]; BZ_ZeroMemory(szBuffer, 100); BFile file; BZ_PROCESS_ERROR(file.Open("ReadMe.txt", "r+") == TRUE); BZ_DEBUG_PRINT_BOOL(file.IsOpen()); BZ_DEBUG_PRINT_INT(file.Size()); BZ_DEBUG_PRINT_BOOL(file.Flush()); BZ_DEBUG_PRINT_BOOL(file.IsEof()); BZ_DEBUG_PRINT_BOOL(file.SeekEnd(0)); BZ_DEBUG_PRINT_BOOL(file.IsEof()); BZ_DEBUG_PRINT_INT(file.Read(szBuffer, 100, 1)); BZ_DEBUG_PRINT_BOOL(file.IsEof()); BZ_DEBUG_PRINT_BOOL(file.SeekBegin(0)); //BZ_DEBUG_PRINT_BOOL(file.WriteLine("abc")); while(file.ReadLine(szBuffer, 100)) { printf("%s", szBuffer); //file.Read(szBuffer, 100, 1); BZ_ZeroMemory(szBuffer, 100); } BZ_DEBUG_PRINT_INT(file.Tell()); BZ_DEBUG_PRINT_INT(file.Write("abc abc", 7, 7)); BZ_DEBUG_PRINT_BOOL(file.Close()); Exit0: return 0; }
LONG BFile::ReadLine(OUT char* const cpBuffer, IN LONG lBufferSize) { LONG lResult = -1; char *pStr = NULL; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); // gets读取换行符并将其丢弃,fgets把换行符存字符串里。 [3/6/2013 T.Q.Y.] pStr = fgets(cpBuffer, lBufferSize, m_hFile); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); if (IsEof()) lResult = 0; else lResult = strnlen(pStr, lBufferSize); Exit0: return lResult; }
LONG BFile::Size() const { LONG lSize = 0; LONG lOriginPos = -1; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); lOriginPos = ftell(m_hFile); fseek(m_hFile, 0, SEEK_END); lSize = ftell(m_hFile); fseek(m_hFile, lOriginPos, SEEK_SET); BZ_PROCESS_ERROR(ferror(m_hFile) == 0); Exit0: return lSize; }
BOOL BFile::IsEof() const { BOOL bRet = FALSE; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); bRet = feof(m_hFile) != 0; // BZ_PROCESS_ERROR(ferror(m_hFile) == 0); Exit0: return bRet; }
BOOL BFile::WriteLine(const char* const cpcBuffer/*, LONG lBufferSize*/) { BOOL bRet = FALSE; int nResult = EOF; BZ_PROCESS_ERROR(m_hFile && ferror(m_hFile) == 0); // 与puts不同,fputs并不为输出自动添加换行符。 [3/6/2013 T.Q.Y.] if (m_bBinaryFile) nResult = fputs(BZ_LINE_BREAK, m_hFile); else nResult = fputs("\n", m_hFile); nResult = fputs(cpcBuffer, m_hFile); BZ_PROCESS_ERROR(nResult != EOF && ferror(m_hFile) == 0); bRet = TRUE; Exit0: return bRet; }
BOOL BFile::Open(const char* const cpcFile, const char* const cpcMode) { BZ_CHECK_C_STRING_RETURN_BOOL(cpcFile); BOOL bRet = FALSE; m_hFile = fopen(cpcFile, cpcMode); BZ_PROCESS_ERROR(m_hFile); if (strchr(cpcMode, 'b')) m_bBinaryFile = TRUE; else m_bBinaryFile = FALSE; bRet = TRUE; Exit0: return bRet; }