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

📄 spnkfile.cpp

📁 linux 下的程序源代码
💻 CPP
字号:
/* * Copyright 2008 Stephen Liu * For license terms, see the file COPYING along with this library. */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include "spnkfile.hpp"#include "spnklog.hpp"SP_NKFileReader :: SP_NKFileReader(){	mBuffer = NULL;	mSize = 0;}SP_NKFileReader :: ~SP_NKFileReader(){	if( NULL != mBuffer ) free( mBuffer );	mBuffer = NULL;	mSize = 0;}int SP_NKFileReader :: read( const char * file ){	int ret = -1;	int fd = ::open( file, O_RDONLY );	if( fd >= 0 ) {		struct stat fileStat;		if( 0 == fstat( fd, &fileStat ) ) {			mBuffer = (char*)malloc( fileStat.st_size + 1 );			if( NULL != mBuffer ) {				mSize = fileStat.st_size;				if( SP_NKFileUtils::readn( fd, mBuffer, fileStat.st_size ) == fileStat.st_size ) {					mBuffer[ fileStat.st_size ] = '\0';					ret = 0;				} else {					SP_NKLog::log( LOG_WARNING, "WARN: read( ..., %li ) fail, errno %d, %s",						fileStat.st_size, errno, strerror( errno ) );				}			} else {				SP_NKLog::log( LOG_WARNING, "WARN: malloc( %li ) fail, errno %d, %s",						fileStat.st_size, errno, strerror( errno ) );			}		} else {			SP_NKLog::log( LOG_WARNING, "WARN: stat %s fail, errno %d, %s",					file, errno, strerror( errno ) );		}		close( fd );	} else {		SP_NKLog::log( LOG_WARNING, "WARN: open %s fail, errno %d, %s",				file, errno, strerror( errno ) );	}	return ret;}const char * SP_NKFileReader :: getBuffer() const{	return mBuffer;}char * SP_NKFileReader :: takeBuffer(){	char * ret = mBuffer;	mBuffer = NULL;	mSize = 0;	return ret;}size_t SP_NKFileReader :: getSize() const{	return mSize;}//---------------------------------------------------------------------------int SP_NKFileUtils :: readn( int fd, void * buff, size_t len ){	size_t	nleft, nread;	char	*ptr;	ptr = (char*)buff;	nleft = len;	while (nleft > 0) {		if ( (nread = read(fd, ptr, nleft)) < 0) {			if( EINTR == errno ) {				continue;			}else {				return(nread);		/* error, return < 0 */			}		} else if (nread == 0) {			break;				/* EOF */		}		nleft -= nread;		ptr   += nread;	}	return(len  - nleft);		/* return >= 0 */}int SP_NKFileUtils :: writen( int fd, const void * buff, size_t len ){	size_t		nleft, nwritten;	const char	*ptr;	ptr = (char*)buff;	/* can't do pointer arithmetic on void* */	nleft = len;	while (nleft > 0) {		if ( (nwritten = write(fd, ptr, nleft)) <= 0) {			if( EINTR == errno ) {				continue;			} else {				return(nwritten);		/* error */			}		}		nleft -= nwritten;		ptr   += nwritten;	}	return(len);}

⌨️ 快捷键说明

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