Go to the documentation of this file.
   30 #define MAP_NORESERVE 0 
   57     minOffset(0), maxOffset(-1), error_(false)
 
   90         if (fstat(
fd, &sb) == 0)
 
  105     open(flags, mode, callback);
 
  147     debugs(79,3, 
"(FD " << 
fd << 
", " << aRequest->
len << 
", " <<
 
  163     if (
void *buf = mapping.
map()) {
 
  164         memcpy(aRequest->
buf, buf, aRequest->
len);
 
  165         done = mapping.
unmap();
 
  169     const ssize_t rlen = 
error_ ? -1 : (ssize_t)aRequest->
len;
 
  177     debugs(79,3, 
"(FD " << 
fd << 
", " << aRequest->
len << 
", " <<
 
  189     const ssize_t written =
 
  194     } 
else if (
static_cast<size_t>(written) != aRequest->
len) {
 
  200         (aRequest->
free_func)(
const_cast<char*
>(aRequest->
buf)); 
 
  203         debugs(79,5, 
"wrote " << aRequest->
len << 
" to FD " << 
fd << 
" at " << aRequest->
offset);
 
  208     const ssize_t rlen = 
error_ ? 0 : (ssize_t)aRequest->
len;
 
  221     fd(aFd), length(aLength), prot(aProt), flags(aFlags), offset(anOffset),
 
  222     delta(-1), buf(nullptr)
 
  236     static const int pageSize = getpagesize();
 
  241     if (
buf == MAP_FAILED) {
 
  242         const int errNo = errno;
 
  249     return static_cast<char*
>(
buf) + 
delta;
 
  263         const int errNo = errno;
 
  
CBDATA_CLASS_INIT(MmappedFile)
const char * xstrerr(int error)
const int fd
descriptor of the mmapped file
const int flags
other mmap(2) flags
const int prot
mmap(2) "protection" flags
void error(char *format,...)
bool ioInProgress() const override
we only support blocking I/O
bool canWrite() const override
bool canRead() const override
int64_t minOffset
enforced if not negative (to preserve file headers)
void read(ReadRequest *) override
void open(int flags, mode_t mode, RefCount< IORequestor > callback) override
bool error() const override
off_t delta
mapped buffer increment to hit user offset
virtual void ioCompletedNotification()=0
RefCount< IORequestor > ioRequestor
Mmapping(int fd, size_t length, int prot, int flags, off_t offset)
const off_t offset
user-requested data offset
bool unmap()
unmaps previously mapped buffer, if any
int64_t maxOffset
enforced if not negative (to avoid crashes)
virtual void writeCompleted(int errflag, size_t len, RefCount< WriteRequest >)=0
void write(WriteRequest *) override
MmappedFile(char const *path)
virtual void closeCompleted()=0
void * buf
buffer returned by mmap, needed for munmap
const size_t length
user-requested data length, needed for munmap
void * map()
calls mmap(2); returns usable buffer or nil on failure
int file_open(const char *path, int mode)
#define debugs(SECTION, LEVEL, CONTENT)
virtual void readCompleted(const char *buf, int len, int errflag, RefCount< ReadRequest >)=0
void create(int flags, mode_t mode, RefCount< IORequestor > callback) override