#define _LARGEFILE64_SOURCE #include #include #include #include #include #define __MODULE__ "File buffer" class FileBuffer { int _fd; char* _buffer; int _bufsize; int _intlimit; int _used; public: FileBuffer(const char* fn, int mode=O_WRONLY | O_TRUNC | O_CREAT, int mask=00644, int bufsize=131072) { if(bufsize<0)throw FATAL("Invalid argument"); _fd=open(fn, mode, mask); if(_fd<0)throw FATAL("Could not open file"); // _buffer=new char[bufsize]; // _bufsize=bufsize; // _intlimit=bufsize-4; // _used=0; } int sync() { // ::write(_fd, _buffer, _used); // _used=0; } int lseek(int offset, int whence) { return ::lseek(_fd, offset, whence); /* if(offset==0 && whence==SEEK_CUR) return ::lseek(_fd, 0, SEEK_CUR)+_used; sync(); return ::lseek(_fd, offset, whence); */ } int write(const void* buffer, int count) { return ::write(_fd, buffer, count); /* if(count<0)return 0; int written=0; while(count) { int size=(count<(_bufsize-_used))?count:(_bufsize-_used); memcpy((char*)_buffer+_used, buffer, size); count-=size; _used+=size; written+=size; buffer=(char*)buffer+size; if(_used==_bufsize)sync(); if(count>_bufsize) { ::write(_fd, _buffer, count); break; } } return written; */ } void write_int(int value) { ::write(_fd, &value, 4); /* if(_used>=_intlimit) sync(); *(int*)(_buffer+_used)=value; _used+=4; return; */ } ~FileBuffer() { // sync(); close(_fd); // delete _buffer; } }; #undef __MODULE__