The Pedigree Project 0.1
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Friends | List of all members
ConsoleFile Class Referenceabstract
+ Inheritance diagram for ConsoleFile:
+ Collaboration diagram for ConsoleFile:

Public Member Functions

 ConsoleFile (size_t consoleNumber, String consoleName, Filesystem *pFs)
 
 ConsoleFile (size_t consoleNumber, String consoleName, Filesystem *pFs, File *pParent)
 
SharedPointer< ConsoleIoState > captureOpenEpoch (bool waitForReopen=true)
 
bool beginRevocation (SharedPointer< ConsoleIoState > &retired)
 
void finishRevocation (const SharedPointer< ConsoleIoState > &retired, const SharedPointer< ConsoleIoState > &replacement)
 
uint64_t readEpoch (const SharedPointer< ConsoleIoState > &epoch, uint64_t size, uintptr_t buffer, bool canBlock)
 
uint64_t writeEpoch (const SharedPointer< ConsoleIoState > &epoch, uint64_t size, uintptr_t buffer, bool canBlock)
 
ReadyMask queryEpoch (const SharedPointer< ConsoleIoState > &epoch, bool reading, bool writing)
 
virtual size_t readableBytes (ConsoleIoState &state)
 
ReadinessGenerations epochGenerations (const SharedPointer< ConsoleIoState > &epoch)
 
SharedPointer< ConsoleControlState > controlState ()
 
void setControlState (const SharedPointer< ConsoleControlState > &state)
 
virtual bool isMaster ()=0
 
bool isCharacterDevice () const override
 
bool isConsole () const override
 
bool isPtySlave ()
 
bool isPtyMaster ()
 
virtual bool isSeekable () const
 
ReadyMask queryReady (bool reading, bool writing) override
 
ReadinessGenerations readinessGenerations () override
 
bool supportsReadinessNotifications () const override
 
void getControlCharacters (char *out)
 Grabs the current array of control characters.
 
virtual size_t getBlockSize () const
 
size_t getConsoleNumber () const
 
virtual size_t getPhysicalConsoleNumber () const
 
- Public Member Functions inherited from File
 File ()
 
 File (const String &name, Time::Timestamp accessedTime, Time::Timestamp modifiedTime, Time::Timestamp creationTime, uintptr_t inode, class Filesystem *pFs, size_t size, File *pParent)
 
virtual ~File ()
 
virtual uint64_t read (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final
 
size_t readCached (uint64_t location, size_t size, uintptr_t buffer, bool(*prepare)(uintptr_t, size_t)=nullptr)
 
virtual uint64_t write (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final
 
uint64_t append (uint64_t size, uintptr_t buffer, uint64_t &location, bool bCanBlock=true)
 
WriteGuard lockWrites ()
 
virtual physical_uintptr_t getPhysicalPage (size_t offset)
 
virtual bool isDirectPhysicalMapping () const
 
size_t physicalMappingFlags () const
 
virtual void returnPhysicalPage (size_t offset)
 
virtual bool tryBeginMappingRelease ()
 
void endMappingRelease ()
 
bool syncAndReturnPhysicalPage (size_t offset, bool async)
 
virtual bool sync ()
 
bool syncRange (size_t offset, size_t length)
 
virtual bool sync (size_t offset, bool async)
 
virtual bool syncPages (const uint64_t *offsets, size_t count)
 
Time::Timestamp getCreationTime ()
 
void setCreationTime (Time::Timestamp t)
 
Time::Timestamp getAccessedTime ()
 
void setAccessedTime (Time::Timestamp t)
 
Time::Timestamp getModifiedTime ()
 
void setModifiedTime (Time::Timestamp t)
 
void setTimes (Time::Timestamp accessed, Time::Timestamp modified, bool changeAccessed, bool changeModified)
 
virtual Attributes getAttributes () const
 
virtual XattrStatus getExtendedAttribute (const StringView &name, void *buffer, size_t capacity, size_t &required)
 
virtual XattrStatus listExtendedAttributes (void *buffer, size_t capacity, size_t &required)
 
virtual XattrStatus setExtendedAttribute (const StringView &name, const void *value, size_t length, unsigned flags)
 
virtual XattrStatus removeExtendedAttribute (const StringView &name)
 
virtual bool prepareSharedMapping (size_t offset, size_t length)
 
String getName () const
 
void getName (String &s) const
 
virtual void getFullPath (String &result, bool bWithMount=true)
 
virtual String getFullPath (bool bWithMount=true)
 
virtual void truncate ()
 
bool resize (size_t size)
 
virtual size_t getSize ()
 
void setSize (size_t sz)
 
virtual bool isSymlink ()
 
virtual bool isDirectory ()
 
virtual bool isBlockDevice () const
 
virtual uint64_t deviceNumber () const
 
virtual bool isPipe () const
 
virtual bool isFifo () const
 
virtual bool isSocket () const
 
bool supportsRegularFileOperations ()
 
virtual uint64_t maximumFileSize () const
 
virtual bool allowMapping (bool shared, bool writeRequested, bool &mayWrite)
 
bool acquireMappingUse (bool executable, bool sharedWrite)
 
void releaseMappingUse (bool executable, bool sharedWrite)
 
uintptr_t getInode () const
 
virtual void setInode (uintptr_t inode)
 
virtual uintptr_t futexIdentity ()
 
Filesystem * getFilesystem () const
 
void setFilesystem (Filesystem *pFs)
 
virtual void fileAttributeChanged ()
 
void publishEvent (FileEventMask mask, const StringView &name=StringView(), bool targetIsDirectory=false)
 
virtual FileHandleStatus subscribeInodeEvents (FileEventMask mask, const SharedPointer< FileEventObserver > &observer, FileEventSubscription &subscription)
 
virtual void finishInodeRetirement ()
 
virtual void increaseRefCount (bool bIsWriter)
 
virtual void decreaseRefCount (bool bIsWriter)
 
virtual bool retainVfsReference ()
 
virtual void releaseVfsReference ()
 
virtual bool isStableVfsRoot () const
 
void setPermissions (uint32_t perms)
 
uint32_t getPermissions () const
 
bool setOwnership (size_t uid, size_t gid, bool changeUid, bool changeGid)
 
void setUid (size_t uid)
 
size_t getUid () const
 
void setGid (size_t gid)
 
size_t getGid () const
 
File * getParent () const
 
void getNamespace (ParentLease &parent, String &name) const
 
void monitor (Thread *pThread, Event *pEvent)
 
void cullMonitorTargets (Thread *pThread)
 
void cullMonitorTargets (Event *pEvent)
 
virtual bool supports (const size_t command) const
 
virtual int command (const size_t command, void *buffer)
 
void markPageExternallyWritable (size_t offset)
 
size_t populateRange (size_t offset, size_t length)
 
void enableDirect ()
 
void disableDirect ()
 
virtual void preallocate (size_t expectedSize, bool zero=true)
 
bool allocateRange (size_t offset, size_t length, bool keepSize=false)
 
virtual File * open ()
 
virtual File * openForDescriptor (RetainedFile &owner)
 
- Public Member Functions inherited from ReadinessSource
MUST_USE_RESULT bool subscribeReadiness (ReadyMask interest, const SharedPointer< ReadinessObserver > &observer, ReadinessSubscription &subscription)
 
- Public Member Functions inherited from FileEventSource
MUST_USE_RESULT bool subscribeFileEvents (FileEventMask interest, const SharedPointer< FileEventObserver > &observer, FileEventSubscription &subscription)
 

Protected Member Functions

virtual int select (bool bWriting, int timeout)
 select - check and optionally for a particular state.
 
virtual uint64_t readIo (ConsoleIoState &state, uint64_t size, uintptr_t buffer, bool canBlock)=0
 
virtual uint64_t writeIo (ConsoleIoState &state, uint64_t size, uintptr_t buffer, bool canBlock)=0
 
void changed ()
 
ConsoleFile * stateOwner ()
 
size_t processInput (char *buf, size_t len)
 Input processing.
 
size_t inputLineDiscipline (ConsoleIoState &state, char *buf, size_t len, bool canBlock, size_t flags=~0U, const char *controlChars=nullptr)
 Input line discipline.
 
- Protected Member Functions inherited from File
bool tryAcquireFilesystemOperation (OperationBarrier::Lease &operation) const
 
virtual void updateAttributes (const Attributes &attributes, uint32_t mask)
 
virtual bool changeOwnership (size_t uid, size_t gid, bool changeUid, bool changeGid)
 
virtual bool allowPhysicalPage () const
 
virtual bool prepareWrite (uint64_t location, uint64_t size)
 
virtual bool allowResize (size_t oldSize, size_t newSize)
 
virtual bool prepareShrink (const ShrinkContext &context, UniquePointer< PreparedShrink > &prepared)
 
virtual bool resizeFile (size_t size)
 
virtual bool allocateFileRange (size_t offset, size_t length)
 
virtual Mutex & writeSerializationLock ()
 
virtual Mutex & dataMutationLock ()
 
virtual size_t & physicalPageLoans ()
 
bool clearDataCache ()
 
virtual uint64_t readBytewise (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
 
virtual uint64_t writeBytewise (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
 
virtual uintptr_t readBlock (uint64_t location)
 
virtual bool readPage (uint64_t location, uintptr_t destination)
 
virtual bool readPages (ReadPage *pages, size_t count)
 
virtual void writeBlock (uint64_t location, uintptr_t addr)
 
virtual void writeBlocks (uint64_t location, uintptr_t addr, size_t length)
 
virtual void extend (size_t newSize)
 
virtual void extend (size_t newSize, uint64_t location, uint64_t size)
 
virtual void publishInodeEvent (const FileEvent &event)
 
void dataChanged ()
 
void getFilesystemLabel (HugeStaticString &s)
 
void enableFillCacheWriteback ()
 
void shutdownFillCacheWriteback ()
 
bool syncFillCache (size_t offset, bool async, bool &present)
 
virtual bool useFillCache () const
 
virtual MUST_USE_RESULT bool pinBlock (uint64_t location)
 
virtual MUST_USE_RESULT uintptr_t acquireCachedBlock (uint64_t location, bool retryChanged)
 
virtual void unpinBlock (uint64_t location)
 
void evict (uint64_t location)
 
void setPermissionsOnly (uint32_t perms)
 
void setUidOnly (size_t uid)
 
void setGidOnly (size_t gid)
 
void retainDetachedParent ()
 
void moveNamespace (const String &name, File *parent)
 
bool snapshotNamespace (ParentLease &parent, String &name, FileEventMask interest) const
 
virtual CacheState & cacheState ()
 
void setPhysicalMappingFlags (size_t flags)
 
- Protected Member Functions inherited from ReadinessSource
void notifyReadiness (ReadyMask mask)
 
void closeReadiness (ReadyMask mask=ReadyInvalid|ReadyHangup)
 
- Protected Member Functions inherited from FileEventSource
bool hasFileEventObservers (FileEventMask mask) const
 
void notifyFileEvent (const FileEvent &event)
 
void notifyFinalFileEvent (const FileEvent &event)
 
void beginFinalFileEvent (const FileEvent &event)
 
void drainFileEvents ()
 
void closeFileEvents ()
 

Static Protected Member Functions

static size_t outputLineDiscipline (char *buf, size_t len, size_t maxSz, size_t flags=0)
 Output line discipline.
 
- Static Protected Member Functions inherited from File
static bool writeCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta)
 
static bool fillCacheCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta)
 
- Static Protected Member Functions inherited from FileEventSource
static bool anyFileEventObservers ()
 

Protected Attributes

ConsoleFile * m_pOther
 Other side of the console.
 
size_t m_Flags
 
char m_ControlChars [MAX_CONTROL_CHAR]
 
unsigned short m_Rows
 
unsigned short m_Cols
 
Mutex m_IoLock
 
ConditionVariable m_IoChanged
 
bool m_HangingUp
 
SharedPointer< ConsoleIoState > m_IoState
 
SharedPointer< ConsoleControlState > m_ControlState
 
- Protected Attributes inherited from File
String m_Name
 
Time::Timestamp m_AccessedTime
 
Time::Timestamp m_ModifiedTime
 
Time::Timestamp m_CreationTime
 
uintptr_t m_Inode
 
uintptr_t m_FutexIdentity = 0
 
class Filesystem * m_pFilesystem
 
size_t m_Size
 
File * m_pParent
 
Mutex m_MetadataLock
 
File * m_pDetachedParent
 
bool m_bDetachedParentHandled
 
size_t m_nWriters
 
size_t m_nReaders
 
size_t m_Uid
 
size_t m_Gid
 
uint32_t m_Permissions
 
CacheState m_CacheState
 
bool m_bDirect
 
Mutex m_WriteLock
 
Mutex m_DataMutationLock
 
size_t m_PhysicalPageLoans = 0
 
size_t m_PhysicalMappingFlags = 0
 
Mutex m_Lock
 
List< MonitorTarget * > m_MonitorTargets
 

Private Member Functions

bool isControlCharacter (size_t flags, char check, const char *controlChars)
 
void notifyControlCharacter (char cause, const char *controlChars)
 
virtual bool isBytewise () const
 

Private Attributes

size_t m_ConsoleNumber
 
String m_ConsoleName
 

Friends

class ConsoleMasterFile
 
class ConsoleSlaveFile
 
class ConsoleManager
 

Additional Inherited Members

- Public Types inherited from File
enum  AttributeMask : uint32_t {
  AccessTime = 1U << 0 , ModifyTime = 1U << 1 , ChangeTime = 1U << 2 , Owner = 1U << 3 ,
  Group = 1U << 4 , Permissions = 1U << 5
}
 
- Static Public Attributes inherited from File
static constexpr size_t MaxReadPages = 32
 

Detailed Description

Definition at line 80 of file Console.h.

Constructor & Destructor Documentation

◆ ConsoleFile() [1/2]

ConsoleFile::ConsoleFile ( size_t  consoleNumber,
String  consoleName,
Filesystem *  pFs 
)

Definition at line 39 of file ConsoleCommon.cc.

◆ ConsoleFile() [2/2]

ConsoleFile::ConsoleFile ( size_t  consoleNumber,
String  consoleName,
Filesystem *  pFs,
File *  pParent 
)

Definition at line 42 of file ConsoleCommon.cc.

◆ ~ConsoleFile()

virtual ConsoleFile::~ConsoleFile ( )
inlinevirtual

Definition at line 88 of file Console.h.

Member Function Documentation

◆ beginRevocation()

bool ConsoleFile::beginRevocation ( SharedPointer< ConsoleIoState > &  retired)

Definition at line 114 of file ConsoleCommon.cc.

◆ captureOpenEpoch()

SharedPointer< ConsoleIoState > ConsoleFile::captureOpenEpoch ( bool  waitForReopen = true)

Definition at line 104 of file ConsoleCommon.cc.

◆ changed()

void ConsoleFile::changed ( )
protected

Definition at line 185 of file ConsoleCommon.cc.

◆ controlState()

SharedPointer< ConsoleControlState > ConsoleFile::controlState ( )

Definition at line 145 of file ConsoleCommon.cc.

◆ epochGenerations()

ReadinessGenerations ConsoleFile::epochGenerations ( const SharedPointer< ConsoleIoState > &  epoch)

Definition at line 226 of file ConsoleCommon.cc.

◆ finishRevocation()

void ConsoleFile::finishRevocation ( const SharedPointer< ConsoleIoState > &  retired,
const SharedPointer< ConsoleIoState > &  replacement 
)

Definition at line 127 of file ConsoleCommon.cc.

◆ getBlockSize()

virtual size_t ConsoleFile::getBlockSize ( ) const
inlinevirtual

Function to retrieve the block size returned by readBlock.

Note
This must be constant throughout the life of the file.

Reimplemented from File.

Definition at line 136 of file Console.h.

◆ getConsoleNumber()

size_t ConsoleFile::getConsoleNumber ( ) const
inline

Definition at line 140 of file Console.h.

◆ getControlCharacters()

void ConsoleFile::getControlCharacters ( char *  out)
inline

Grabs the current array of control characters.

Definition at line 132 of file Console.h.

◆ getPhysicalConsoleNumber()

virtual size_t ConsoleFile::getPhysicalConsoleNumber ( ) const
inlinevirtual

Definition at line 144 of file Console.h.

◆ inputLineDiscipline()

size_t ConsoleFile::inputLineDiscipline ( ConsoleIoState &  state,
char *  buf,
size_t  len,
bool  canBlock,
size_t  flags = ~0U,
const char *  controlChars = nullptr 
)
protected

◆ isBytewise()

virtual bool ConsoleFile::isBytewise ( ) const
inlineprivatevirtual

File subclasses can define this and return true if they require read() calls to perform actual data reads, and false if readBlock() is otherwise sufficient.

Reimplemented from File.

Definition at line 191 of file Console.h.

◆ isCharacterDevice()

bool ConsoleFile::isCharacterDevice ( ) const
inlineoverridevirtual

Reimplemented from File.

Definition at line 105 of file Console.h.

◆ isConsole()

bool ConsoleFile::isConsole ( ) const
inlineoverridevirtual

Reimplemented from File.

Definition at line 108 of file Console.h.

◆ isControlCharacter()

bool ConsoleFile::isControlCharacter ( size_t  flags,
char  check,
const char *  controlChars 
)
private

Definition at line 546 of file ConsoleCommon.cc.

◆ isPtyMaster()

bool ConsoleFile::isPtyMaster ( )
inline

Definition at line 116 of file Console.h.

◆ isPtySlave()

bool ConsoleFile::isPtySlave ( )
inline

Definition at line 112 of file Console.h.

◆ isSeekable()

virtual bool ConsoleFile::isSeekable ( ) const
inlinevirtual

Whether ordinary reads and writes consume a persistent byte offset.

Reimplemented from File.

Definition at line 120 of file Console.h.

◆ notifyControlCharacter()

void ConsoleFile::notifyControlCharacter ( char  cause,
const char *  controlChars 
)
private

Definition at line 557 of file ConsoleCommon.cc.

◆ outputLineDiscipline()

size_t ConsoleFile::outputLineDiscipline ( char *  buf,
size_t  len,
size_t  maxSz,
size_t  flags = 0 
)
staticprotected

Output line discipline.

Definition at line 240 of file ConsoleCommon.cc.

◆ processInput()

size_t ConsoleFile::processInput ( char *  buf,
size_t  len 
)
protected

Input processing.

Definition at line 303 of file ConsoleCommon.cc.

◆ queryEpoch()

ReadyMask ConsoleFile::queryEpoch ( const SharedPointer< ConsoleIoState > &  epoch,
bool  reading,
bool  writing 
)

Definition at line 200 of file ConsoleCommon.cc.

◆ queryReady()

ReadyMask ConsoleFile::queryReady ( bool  reading,
bool  writing 
)
overridevirtual

Return the current readiness state for this open endpoint.

Reimplemented from File.

Reimplemented in ConsolePhysicalFile.

Definition at line 218 of file ConsoleCommon.cc.

◆ readableBytes()

size_t ConsoleFile::readableBytes ( ConsoleIoState &  state)
virtual

Definition at line 222 of file ConsoleCommon.cc.

◆ readEpoch()

uint64_t ConsoleFile::readEpoch ( const SharedPointer< ConsoleIoState > &  epoch,
uint64_t  size,
uintptr_t  buffer,
bool  canBlock 
)

Definition at line 161 of file ConsoleCommon.cc.

◆ readinessGenerations()

ReadinessGenerations ConsoleFile::readinessGenerations ( )
overridevirtual

Return source-serialized rising-edge sequences where available.

A source increments the corresponding sequence while holding the same lock which changes its readiness predicate. Consumers can then recover a drain/refill transition even if the two callback deliveries are reordered.

Reimplemented from ReadinessSource.

Definition at line 236 of file ConsoleCommon.cc.

◆ select()

int ConsoleFile::select ( bool  bWriting,
int  timeout 
)
protectedvirtual

select - check and optionally for a particular state.

Reimplemented from File.

Reimplemented in ConsolePhysicalFile.

Definition at line 191 of file ConsoleCommon.cc.

References Buffer< T, allowShortOperation >::canRead(), and Buffer< T, allowShortOperation >::canWrite().

◆ setControlState()

void ConsoleFile::setControlState ( const SharedPointer< ConsoleControlState > &  state)

Definition at line 151 of file ConsoleCommon.cc.

◆ stateOwner()

ConsoleFile * ConsoleFile::stateOwner ( )
protected

Definition at line 100 of file ConsoleCommon.cc.

◆ supportsReadinessNotifications()

bool ConsoleFile::supportsReadinessNotifications ( ) const
inlineoverridevirtual

Whether readiness transitions are reported through ReadinessSource.

Reimplemented from File.

Reimplemented in ConsolePhysicalFile.

Definition at line 127 of file Console.h.

◆ writeEpoch()

uint64_t ConsoleFile::writeEpoch ( const SharedPointer< ConsoleIoState > &  epoch,
uint64_t  size,
uintptr_t  buffer,
bool  canBlock 
)

Definition at line 171 of file ConsoleCommon.cc.

Friends And Related Symbol Documentation

◆ ConsoleManager

friend class ConsoleManager
friend

Definition at line 83 of file Console.h.

◆ ConsoleMasterFile

friend class ConsoleMasterFile
friend

Definition at line 81 of file Console.h.

◆ ConsoleSlaveFile

friend class ConsoleSlaveFile
friend

Definition at line 82 of file Console.h.

Member Data Documentation

◆ m_Cols

unsigned short ConsoleFile::m_Cols
protected

Definition at line 166 of file Console.h.

◆ m_ConsoleName

String ConsoleFile::m_ConsoleName
private

Definition at line 186 of file Console.h.

◆ m_ConsoleNumber

size_t ConsoleFile::m_ConsoleNumber
private

Definition at line 185 of file Console.h.

◆ m_ControlChars

char ConsoleFile::m_ControlChars[MAX_CONTROL_CHAR]
protected

Definition at line 163 of file Console.h.

◆ m_ControlState

SharedPointer<ConsoleControlState> ConsoleFile::m_ControlState
protected

Definition at line 182 of file Console.h.

◆ m_Flags

size_t ConsoleFile::m_Flags
protected

Definition at line 162 of file Console.h.

◆ m_HangingUp

bool ConsoleFile::m_HangingUp
protected

Definition at line 180 of file Console.h.

◆ m_IoChanged

ConditionVariable ConsoleFile::m_IoChanged
protected

Definition at line 179 of file Console.h.

◆ m_IoLock

Mutex ConsoleFile::m_IoLock
mutableprotected

Definition at line 178 of file Console.h.

◆ m_IoState

SharedPointer<ConsoleIoState> ConsoleFile::m_IoState
protected

Definition at line 181 of file Console.h.

◆ m_pOther

ConsoleFile* ConsoleFile::m_pOther
protected

Other side of the console.

Definition at line 160 of file Console.h.

Referenced by inputLineDiscipline().

◆ m_Rows

unsigned short ConsoleFile::m_Rows
protected

Definition at line 165 of file Console.h.


The documentation for this class was generated from the following files: