66 return m_AdvisoryOwner;
70 return m_AdvisoryOwner.identity();
73 File* getFile()
const {
74 return path ? path->node() : anonymousFile;
77 ReadyMask queryFileReady(
bool reading,
bool writing)
const;
87 size_t descriptorOwnerCount()
const;
96 int initialStatusFlags);
98 void addDescriptorOwner();
99 void removeDescriptorOwner();
100 void ensureVfsLease();
116 const int accessFlags;
118 size_t descriptorOwners;
127 uint64_t offset()
const {
128 return m_Description->offset;
131 int statusFlags()
const {
132 return m_Description->statusFlags;
136 return m_Description->getFile();
139 bool isNoopSeekEndpoint()
const {
140 return m_Description->timerFdImpl || m_Description->signalFdImpl ||
141 m_Description->fanotifyImpl;
144 void setOffset(uint64_t offset) {
145 m_Description->offset = offset;
148 void advanceOffset(uint64_t amount) {
149 m_Description->offset += amount;
163 enum class Endpoint { Input, Output };
170 int statusFlags(Endpoint endpoint)
const;
171 uint64_t offset(Endpoint endpoint)
const;
172 void commitOffset(Endpoint endpoint, uint64_t finalOffset);
173 bool sameDescription()
const;
178#if THREADS && !defined(STANDALONE_MUTEXES)
193 FileDescriptor(
File* newFile, uint64_t newOffset = 0,
size_t newFd = 0xFFFFFFFF,
int fdFlags = 0,
197 int fdFlags = 0,
int flFlags = 0);
212 void setFlags(
int newFlags);
215 void addFlag(
int newFlag);
218 int getFlags()
const;
221 void setStatusFlags(
int newFlags);
224 void addStatusFlag(
int newFlag);
227 void removeStatusFlag(
int flag);
230 int getStatusFlags()
const;
233 int getAccessFlags()
const {
234 return m_OpenFile->accessFlags;
238 OpenFileDescriptionLease acquireOpenFileDescription()
const;
244 bool networkPublished()
const;
253 bool eventFdPublished()
const;
257 bool timerFdPublished()
const;
261 bool signalFdPublished()
const;
278 PositionGuard lockPosition()
const;
281 uint64_t getOffset()
const;
284 void setOffset(uint64_t offset);
287 uint64_t read(uint64_t size, uintptr_t buffer,
bool canBlock =
true);
290 uint64_t write(uint64_t size, uintptr_t buffer,
bool canBlock =
true);
305 bool terminalHungUp()
const;
306 bool terminalAvailable()
const;
308 uint64_t readFile(uint64_t location, uint64_t size, uintptr_t buffer,
bool canBlock);
309 uint64_t writeFile(uint64_t location, uint64_t size, uintptr_t buffer,
bool canBlock);
311 File* getFile()
const {
312 return m_OpenFile ? m_OpenFile->getFile() :
nullptr;
342 bool m_TimerFdPublished =
false;
343 bool m_SignalFdPublished =
false;