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