Namespaces | |
namespace | Signal |
Classes | |
class | AnonymousInputOutputStream |
Abstract anonymous input/output stream class used in IPC. More... | |
class | AnonymousInputStream |
Abstract anonymous input stream class used in IPC. More... | |
class | Console |
Provides a console abstraction for basic output of text in a terminal. More... | |
class | DirectoryDelegatingException |
Thrown when file operations failed because of underlying filesystem manager: the corresponding backend could not be retrieved as expected. More... | |
class | Directory |
Abstract directory mother class, so that programs can always manipulate Ceylan::Directory instances, whereas per-platform specialized classes are actually used by the system. More... | |
class | FIFO |
Interrupt-based FIFO (First In, First Out) class for command-based Inter-Process Communication (IPC). More... | |
class | FileReadLockingFailed |
class | FileReadUnlockingFailed |
class | FileWriteLockingFailed |
class | FileWriteUnlockingFailed |
class | FileDelegatingException |
Thrown when file operations failed because of underlying filesystem manager: the corresponding backend could not be retrieved as expected. More... | |
class | File |
Abstract file mother class, so that programs can always manipulate Ceylan::File instances, whereas per-platform specialized classes are actually used by the system. More... | |
class | FileLocatorException |
Exception raised when file locator could not fulfill a request. More... | |
class | FileLocator |
File locators allow to find files in a set of directories, as Unix PATH variables do. More... | |
class | FileManagementException |
Mother class of all file-related exceptions, including filesystems, files and directories. More... | |
class | FileSystemException |
Thrown when filesystem operations failed. More... | |
class | ConversionFailed |
Thrown when the conversion of a filesystem object failed. More... | |
class | DuplicateFailed |
Thrown when the duplication of a filesystem object failed. More... | |
class | FileException |
Thrown when file operations failed. More... | |
class | FileCreationFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileOpeningFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileAlreadyOpened |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileLookupFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileRemoveFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileMoveFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileCopyFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileSizeRequestFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileLastChangeTimeRequestFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileTouchFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | FileDiffFailed |
Raised at first by FileSystemManager and file-specific. More... | |
class | DirectoryException |
Thrown when directory operations failed. More... | |
class | DirectoryCreationFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryOpeningFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryLookupFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryRemoveFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryMoveFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryCopyFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryLastChangeTimeRequestFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryGetCurrentFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | DirectoryChangeFailed |
Raised at first by FileSystemManager and directory-specific. More... | |
class | FileSystemManagerException |
Thrown when filesystem manager operations failed. More... | |
class | EntryLookupFailed |
class | SymlinkFailed |
class | GetChangeTimeFailed |
class | FileSystemManagerDelegatingException |
class | FileSystemManager |
Interface (abstract class) that allows to manage a specific filesystem. More... | |
class | InputOutputStream |
Abstract input/output stream class used in IPC. More... | |
class | InputStream |
Abstract input stream class used in IPC. More... | |
class | LibfatDirectory |
Encapsulates libfat directories, as provided by usual operating systems. More... | |
class | LibfatFileException |
Mother class for all exceptions related to libfat files. More... | |
class | LibfatFile |
Encapsulates libfat-based files, as provided by the libfat DS library. More... | |
class | LibfatFileSystemManagerException |
class | LibfatFileSystemManager |
Allows to manage a libfat-based filesystem directly, with no OS support, on platforms that support it, i.e. More... | |
class | MemoryStream |
Makes a buffer in memory behaving like an InputOutputStream. More... | |
class | Mutex |
Simple mutual exclusion device. More... | |
class | OutputStream |
Abstract output stream class used in IPC. More... | |
class | Pipe |
Pipe class for Inter-Process Communication (IPC). More... | |
class | ProcessException |
Exception class for process concerns. More... | |
class | Process |
class | RunnableException |
Exception class for runnable concerns. More... | |
class | Runnable |
Basic runnable interface. More... | |
class | StandardDirectory |
Encapsulates standard directories, as provided by usual operating systems. More... | |
class | StandardFileException |
Mother class for all exceptions related to standard files. More... | |
class | StandardFile |
Encapsulates standard files, as provided by usual operating systems, i.e. More... | |
class | StandardFileSystemManagerException |
class | StandardFileSystemManager |
Allows to interact with the filesystems supported by any underlying operation system. More... | |
class | Stream |
Abstract stream class used in IPC. More... | |
class | Synchronized |
Template defining generically objects (notably numerical datatypes) protected by a mutex. More... | |
class | Synchronized< bool > |
Partial specialization of the Synchonized template for bool. More... | |
class | SystemException |
Exception raised when system operation fails. More... | |
class | IOException |
Exception raised when basic input/output operation fails. More... | |
class | Thread |
Basic abstract class for threaded objects. More... | |
Typedefs | |
typedef Ceylan::Uint32 | FIFOElement |
The atomic data that can be sent through the FIFO. | |
typedef Ceylan::Uint16 | OpeningFlag |
File opening openFlags, they can be OR'ed. | |
typedef Ceylan::Uint16 | PermissionFlag |
File creation abstract permissions, to be used in case a new file is created. | |
typedef Ceylan::Uint32 | Pid |
Describes a Process Identifier (PID). | |
typedef void(* | Callback )(void *data) |
Signature of an classical callback function. | |
typedef int | StreamID |
A stream's unique ID. | |
typedef size_t | Size |
Unsigned size, in bytes, for example for file operations. | |
typedef long | Position |
Unsigned position, in bytes, for example for file operations. | |
typedef ssize_t | SignedSize |
Signed size, in bytes, for example for file operations. | |
typedef Uint32 | Second |
Records seconds, even for long periods of time (more than a century). | |
typedef Uint32 | Millisecond |
Records milliseconds, which last 10^¯3 second. | |
typedef Uint32 | Microsecond |
Records microseconds, which last 10^¯6 second. | |
typedef Uint32 | Nanosecond |
Records nanoseconds, which last 10^¯9 second. | |
typedef int | FileDescriptor |
UNIX File descriptor type, they have to be transformed into the StreamID datatype to comply with the Stream interface. | |
typedef int | ErrorCode |
Error number as defined by errno. | |
typedef int | InterruptMask |
Masks describing which interrupts are enabled. | |
typedef void(* | IRQHandler )(void) |
Signature of an interrupt handler. | |
typedef Ceylan::Uint32 | ThreadCount |
Data type to store numbers of threads. | |
Enumerations | |
enum | BatteryStatus { WellCharged, AlmostEmpty, BatteryStatusUnknown } |
Describes the status of the battery (if any). More... | |
enum | DSType { DSFat, DSLite, DSTypeUnknown } |
Describes the type of a Nintendo DS. More... | |
Functions | |
CEYLAN_DLL bool | isEnvironmentVariableSet (const std::string &variableName) |
Returns whether the specified environment variable is set. | |
CEYLAN_DLL const std::string | getEnvironmentVariable (const std::string &variableName) |
Returns the value of specified environment variable. | |
CEYLAN_DLL void | setEnvironmentVariable (const std::string &variableName, const std::string &variableValue) |
Sets specified environment variable to the specified value. | |
CEYLAN_DLL void | unsetEnvironmentVariable (const std::string &variableName) |
Unsets specified environment variable. | |
CEYLAN_DLL ErrorCode | getError () |
Returns the error ID (errno). | |
CEYLAN_DLL std::string | explainError (ErrorCode errorID) |
Returns the diagnosis string corresponding to errorID (errno). | |
CEYLAN_DLL std::string | explainError () |
Returns the diagnosis string corresponding to current error ID (errno). | |
CEYLAN_DLL std::string | getShellName () |
Returns the name of the default shell, if found, otherwise returns an empty string. | |
CEYLAN_DLL void | InitializeInterrupts (bool force=false) |
On platforms requiring it (ex: the Nintendo DS), initializes the interrupt system by using a default handler. | |
CEYLAN_DLL InterruptMask | SetEnabledInterrupts (InterruptMask newMask=AllInterruptsDisabled) |
On platforms supporting it (ex: the Nintendo DS on the ARM9), sets the current set of interrupts enabled. | |
CEYLAN_DLL void | InitializeIPC () |
On platforms requiring it (ex: the Nintendo DS), initializes the IPC system (Inter-Process Communication), by setting up the FIFO infrastructure (creation and activation). | |
template<typename T > | |
T * | ConvertToNonCacheable (T *sourceAddress) |
Converts specified address, expected to be in main RAM, into a mirrored address in the non-cacheable RAM mirror. | |
CEYLAN_DLL Ceylan::Byte * | CacheProtectedNew (Size numberOfBytes) |
Reserves the specified size of memory so that it is compliant with the Nintendo DS ARM9 data cache, i.e. | |
CEYLAN_DLL void | CacheProtectedDelete (Ceylan::Byte *cacheProtectedBuffer) |
Deallocates the specified cache-protected buffer. | |
CEYLAN_DLL bool | HasAvailableData (FileDescriptor fd) |
Tells whether there is data available on specified file descriptor. | |
CEYLAN_DLL Size | FDRead (FileDescriptor fd, Ceylan::Byte *dataBuffer, Size toReadBytesNumber) |
Reads from fd stream to dataBuffer toReadBytesNumber bytes. | |
CEYLAN_DLL Size | FDWrite (FileDescriptor fd, const Ceylan::Byte *dataBuffer, Size toWriteBytesNumber) |
Writes to fd stream from dataBuffer toWriteBytesNumber bytes. | |
CEYLAN_DLL Second | getTime () |
Returns the current time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds. | |
CEYLAN_DLL std::string | timeToString (const time_t &t) |
Converts the time moment into a human readable string. | |
CEYLAN_DLL std::string | durationToString (Second startingSecond, Microsecond startingMicrosecond, Second stoppingSecond, Microsecond stoppingMicrosecond) |
CEYLAN_DLL Microsecond | getDurationBetween (Second startingSecond, Microsecond startingMicrosecond, Second stoppingSecond, Microsecond stoppingMicrosecond) |
Returns the duration, in microseconds, between the two specified times, i.e. | |
CEYLAN_DLL void | getPreciseTime (Second &seconds, Microsecond µsec) |
Returns the time since the Epoch (00:00:00 UTC, January 1, 1970), with up to a one microsecond accuracy, expressed as a pair containing the number of seconds and the number of microseconds elapsed. | |
CEYLAN_DLL Microsecond | getAccuracyOfPreciseTime (Microsecond *minGap=0, Microsecond *maxGap=0) |
Returns the mean runtime-computed actual accuracy if the precise time measurement, expressed in microseconds. | |
CEYLAN_DLL Microsecond | getPreciseTimeCallDuration () |
Returns the mean duration of a call to getPreciseTime. | |
CEYLAN_DLL void | sleepForSeconds (Second secondCount) |
Sleeps for the specified number of seconds. | |
CEYLAN_DLL bool | areSubSecondSleepsAvailable () |
Tells whether sub-second sleeps can be performed. | |
CEYLAN_DLL void | atomicSleep () |
Makes the process sleep for a quite small duration, which is probably the smallest possible duration on the system, scheduler-wise, i.e. | |
CEYLAN_DLL void | basicSleep (Second secondCount, Nanosecond nanoCount) |
Makes the process basically sleep for (at least) specified duration. | |
CEYLAN_DLL void | basicSleep (Microsecond micros) |
Makes the process basically sleep for (at least) specified duration. | |
CEYLAN_DLL bool | smartSleep (Second secondCount, Microsecond microCount) |
Makes the process smartly sleep for the specified duration. | |
CEYLAN_DLL bool | smartSleepUntil (Second secondCount, Microsecond microCount) |
Makes the process smartly sleep until the specified time arrives. | |
CEYLAN_DLL Microsecond | getActualDurationForSleep (Microsecond requestedMicroseconds, Second requestedSeconds=0) |
Sleeps, and returns the actual sleeping time corresponding to the requested sleeping time, expressed in seconds and microseconds. | |
CEYLAN_DLL Microsecond | getSchedulingGranularity () |
Returns the run-time computed scheduling granularity of the time slice enforced by the operating system. | |
CEYLAN_DLL bool | setLegacyStreamSynchronization (bool synchronized) |
Sets whether the C++ standard streams (cin, cout, cerr, clog, and their wide-character counterparts) should be synchronized with their C-stream counterparts (this is the default situation). | |
CEYLAN_DLL UnsignedLongInteger | getSecondsSinceSystemBoot () |
Returns the uptime, the number of seconds since the system booted. | |
CEYLAN_DLL Ceylan::Uint32 | getTotalProcessCount () |
Returns the current number of running processes. | |
CEYLAN_DLL UnsignedLongInteger | getTotalSystemMemorySize () |
Returns the total size of usable main memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getFreeSystemMemorySize () |
Returns the size of currently available main memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getUsedSystemMemorySize () |
Returns the size of main memory being currently used, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getTotalSwapMemorySize () |
Returns the total size of swap memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getFreeSwapMemorySize () |
Returns the size of currently available swap memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getTotalHighMemorySize () |
Returns the total size of usable high memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getFreeHighMemorySize () |
Returns the size of currently available high memory, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getSharedMemorySize () |
Returns the size of memory currently being shared, in bytes. | |
CEYLAN_DLL UnsignedLongInteger | getBuffersMemorySize () |
Returns the size of memory currently used by buffers, in bytes. | |
CEYLAN_DLL std::string | GetUserName () |
Returns the name of the user, as retrieved from the system. | |
CEYLAN_DLL BatteryStatus | GetBatteryStatus () |
Returns the current battery status. | |
CEYLAN_DLL DSType | GetDSType () |
Returns the type of the DS running the program. | |
CEYLAN_DLL bool | openGLContextsCanBeLost () |
Tells whether the OpenGL contexts can be lost (and therefore may have to be reloaded) under certain unexpected circumstances (ex : window resize, going to fullscreen, switching to another application, etc. | |
CEYLAN_DLL bool | openGLContextsLostOnResize () |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when the window application is resized (resolution changed). | |
CEYLAN_DLL bool | openGLContextsLostOnApplicationSwitch () |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when switching to another application. | |
CEYLAN_DLL bool | openGLContextsLostOnColorDepthChange () |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when changing the color depth. | |
Variables | |
CEYLAN_DLL const InterruptMask | AllInterruptsDisabled = 0 |
To specify that all interrupts are to disabled (null value). | |
CEYLAN_DLL const Second | MaximumDurationWithMicrosecondAccuracy = 4100 |
The maximum number of seconds for durations to be evaluated with a microsecond accuracy, before an overflow may occur. |
System query primitives.
Manages in a C++ user-friendly fashion basic system services.
typedef void(* Ceylan::System::Callback)(void *data) |
Signature of an classical callback function.
They can be useful so that functions can change behaviour by calling such generic callbacks. These caller functions do not have to know their callbacks a priori.
The data parameter allows to customize the callback, which will have to cast the given argument to the specific data it is actually looking for.
Even though no exception specification can be specified, the callback should not throw any exception whatsoever.
Definition at line 76 of file CeylanRunnable.h.
typedef int Ceylan::System::ErrorCode |
typedef int Ceylan::System::FileDescriptor |
UNIX File descriptor type, they have to be transformed into the StreamID datatype to comply with the Stream interface.
Also needed on Windows for socket handles (SOCKET datatype), whose type is UINT_PTR.
Definition at line 179 of file CeylanSystem.h.
typedef int Ceylan::System::InterruptMask |
typedef void(* Ceylan::System::IRQHandler)(void) |
typedef Uint32 Ceylan::System::Microsecond |
typedef Uint32 Ceylan::System::Millisecond |
typedef Uint32 Ceylan::System::Nanosecond |
File opening openFlags, they can be OR'ed.
At least one of the { Read ; Write } pair must be set.
Definition at line 54 of file CeylanFile.h.
File creation abstract permissions, to be used in case a new file is created.
Permissions can be OR'ed.
Actual permissions can be modified by the umask of the process, according to (actualPermissionFlag & ~umask).
Definition at line 82 of file CeylanFile.h.
typedef Ceylan::Uint32 Ceylan::System::Pid |
typedef long Ceylan::System::Position |
Unsigned position, in bytes, for example for file operations.
Definition at line 72 of file CeylanSystem.h.
typedef Uint32 Ceylan::System::Second |
Records seconds, even for long periods of time (more than a century).
Definition at line 108 of file CeylanSystem.h.
typedef ssize_t Ceylan::System::SignedSize |
Signed size, in bytes, for example for file operations.
Definition at line 93 of file CeylanSystem.h.
typedef size_t Ceylan::System::Size |
Unsigned size, in bytes, for example for file operations.
Definition at line 64 of file CeylanSystem.h.
typedef int Ceylan::System::StreamID |
A stream's unique ID.
Definition at line 55 of file CeylanStream.h.
Describes the status of the battery (if any).
Definition at line 233 of file CeylanSystemInformation.h.
Describes the type of a Nintendo DS.
DSFat | The first DS release. |
DSLite | The update of the first DS. |
DSTypeUnknown | Indicates that the type of the DS is not known. |
Definition at line 270 of file CeylanSystemInformation.h.
bool Ceylan::System::areSubSecondSleepsAvailable | ( | ) |
Tells whether sub-second sleeps can be performed.
On some platforms (UNIX) it requires the file descriptor feature to be activated.
Definition at line 1210 of file CeylanSystem.cc.
References generalUtils::false, and generalUtils::true.
Referenced by Ceylan::waitForKey().
void Ceylan::System::atomicSleep | ( | ) |
Makes the process sleep for a quite small duration, which is probably the smallest possible duration on the system, scheduler-wise, i.e.
exactly one time slice.
This is useful to spare CPU time/battery life by avoiding busy loops, without needing fine-grained timing: it is just a convenient way of adding a delay in a busy loop so that it becomes more resource-friendly, while minimizing the delay.
SystemException | if the operation failed, included if the necessary file descriptor feature is not available. |
Needs the VBlank IRQ to be enabled.
Definition at line 1349 of file CeylanSystem.cc.
References basicSleep(), getSchedulingGranularity(), and InitializeInterrupts().
Referenced by Ceylan::System::FIFO::activate(), Ceylan::System::FIFO::deactivate(), Ceylan::System::FIFO::FIFO(), Ceylan::System::FIFO::getBatteryStatus(), Ceylan::getChar(), Ceylan::System::FIFO::getDSType(), initCeylanIPC(), initCeylanSound(), Ceylan::System::LibfatFileSystemManager::LibfatFileSystemManager(), smartSleep(), and Ceylan::waitForKey().
void Ceylan::System::basicSleep | ( | Microsecond | micros | ) |
Makes the process basically sleep for (at least) specified duration.
Definition at line 1399 of file CeylanSystem.cc.
References basicSleep(), and OneMillion.
void Ceylan::System::basicSleep | ( | Second | secondCount, | |
Nanosecond | nanoCount | |||
) |
Makes the process basically sleep for (at least) specified duration.
Sleeps are far better than busy waiting (waiting loops) insofar as other processes can be executed during the sleep, and most laptops should consume less power that way.
The problem with basic sleeping is that it depends on the granularity of the scheduling for the underlying operating system. For example, no sleep may be shorter than 10 ms on Linux/i386 (prior to kernel 2.6) and 1 ms on Linux/Alpha.
secondCount | the number of seconds to wait | |
nanoCount | the remaining part of the time to wait, expressed as a number of nanoseconds. As full seconds should be taken into account with the parameter second, nanos should be less than one second, i.e. should be in the range 0 to 10E9 - 1. |
SystemException | if a non-blocked signal interrupted the sleep, or if the nanos parameter was out of range, or if the necessary file descriptor feature is not available. |
Definition at line 1238 of file CeylanSystem.cc.
References explainError(), InitializeInterrupts(), OneMillion, and Ceylan::toString().
Referenced by atomicSleep(), basicSleep(), getActualDurationForSleep(), Ceylan::System::Thread::Sleep(), sleepForSeconds(), and smartSleep().
void Ceylan::System::CacheProtectedDelete | ( | Ceylan::Byte * | cacheProtectedBuffer | ) |
Deallocates the specified cache-protected buffer.
cacheProtectedBuffer | a buffer created with CacheProtectedNew. |
SystemException | if the operation failed, ex: pointer not registered. |
Definition at line 448 of file CeylanSystem.cc.
References AllInterruptsDisabled, generalUtils::false, Ceylan::toString(), and generalUtils::true.
Referenced by Ceylan::System::FIFO::~FIFO().
Ceylan::Byte * Ceylan::System::CacheProtectedNew | ( | Size | numberOfBytes | ) |
Reserves the specified size of memory so that it is compliant with the Nintendo DS ARM9 data cache, i.e.
the returned buffer spreads over an integer number of cache lines, so that flushing or invalidating these lines will not affect other data.
This function is only useful for the DS ARM9.
numberOfBytes | the size of the safe buffer to allocate. |
SystemException | if the operation failed, ex: not enough memory. |
Definition at line 354 of file CeylanSystem.cc.
References AllInterruptsDisabled, generalUtils::false, and generalUtils::true.
Referenced by Ceylan::System::FIFO::FIFO().
T* Ceylan::System::ConvertToNonCacheable | ( | T * | sourceAddress | ) | [inline] |
Converts specified address, expected to be in main RAM, into a mirrored address in the non-cacheable RAM mirror.
Only useful for the DS ARM9, to ensure its data cache is not used, for example when sharing data with the ARM7, which does not see the ARM9 cache.
Definition at line 316 of file CeylanSystem.h.
string Ceylan::System::durationToString | ( | Second | startingSecond, | |
Microsecond | startingMicrosecond, | |||
Second | stoppingSecond, | |||
Microsecond | stoppingMicrosecond | |||
) |
string Ceylan::System::explainError | ( | ) |
Returns the diagnosis string corresponding to current error ID (errno).
Definition at line 209 of file CeylanSystem.cc.
Referenced by Ceylan::Network::ClientStreamSocket::connect(), Ceylan::Network::getLocalHostDomainName(), Ceylan::Network::getLocalHostName(), Ceylan::Network::getMostPreciseLocalHostName(), Ceylan::Network::setLocalHostDomainName(), Ceylan::Network::setLocalHostName(), and Ceylan::Network::StreamSocket::setNagleAlgorithmTo().
string Ceylan::System::explainError | ( | ErrorCode | errorID | ) |
Returns the diagnosis string corresponding to errorID (errno).
Definition at line 199 of file CeylanSystem.cc.
Referenced by Ceylan::Network::AnonymousStreamSocket::AnonymousStreamSocket(), basicSleep(), Ceylan::System::StandardFileSystemManager::changeWorkingDirectory(), Ceylan::System::LibfatFileSystemManager::changeWorkingDirectory(), Ceylan::Network::StreamSocket::createSocket(), Ceylan::System::StandardFileSystemManager::createSymbolicLink(), FDRead(), FDWrite(), getBuffersMemorySize(), Ceylan::System::StandardFileSystemManager::getCurrentWorkingDirectoryPath(), Ceylan::System::StandardDirectory::getEntries(), Ceylan::System::StandardFileSystemManager::getEntryChangeTime(), Ceylan::System::LibfatFileSystemManager::getEntryChangeTime(), getEnvironmentVariable(), Ceylan::System::StandardDirectory::getFiles(), getFreeHighMemorySize(), getFreeSwapMemorySize(), getFreeSystemMemorySize(), Ceylan::System::StandardFile::getLastChangeTime(), Ceylan::System::LibfatFile::getLastChangeTime(), Ceylan::System::StandardFileSystemManager::getLastChangeTimeDirectory(), Ceylan::System::LibfatFileSystemManager::getLastChangeTimeDirectory(), Ceylan::System::StandardFileSystemManager::getLastChangeTimeFile(), Ceylan::System::LibfatFileSystemManager::getLastChangeTimeFile(), getPreciseTime(), getSecondsSinceSystemBoot(), getSharedMemorySize(), Ceylan::System::StandardFileSystemManager::getSize(), Ceylan::System::LibfatFileSystemManager::getSize(), Ceylan::System::StandardDirectory::getSortedEntries(), Ceylan::System::StandardDirectory::getSubdirectories(), getTime(), Ceylan::System::Process::GetTime(), getTotalHighMemorySize(), getTotalProcessCount(), getTotalSwapMemorySize(), getTotalSystemMemorySize(), HasAvailableData(), Ceylan::System::Process::kill(), Ceylan::System::LibfatDirectory::LibfatDirectory(), Ceylan::System::StandardFile::lockForReading(), Ceylan::System::StandardFile::lockForWriting(), Ceylan::System::StandardFileSystemManager::moveDirectory(), Ceylan::System::StandardFileSystemManager::moveFile(), Ceylan::System::LibfatFileSystemManager::moveFile(), Ceylan::System::Pipe::Pipe(), Ceylan::Network::ServerStreamSocket::prepareToAccept(), Ceylan::System::Process::processCreationFailed(), Ceylan::System::Pipe::read(), Ceylan::System::StandardFileSystemManager::removeDirectory(), Ceylan::System::LibfatFileSystemManager::removeDirectory(), Ceylan::System::StandardFileSystemManager::removeFile(), Ceylan::System::LibfatFileSystemManager::removeFile(), Ceylan::System::StandardFile::reopen(), Ceylan::System::LibfatFile::reopen(), Ceylan::System::Process::RunExecutable(), Ceylan::System::StandardFile::seek(), Ceylan::System::InputStream::Select(), Ceylan::Network::ServerStreamSocket::ServerStreamSocket(), Ceylan::Network::StreamSocket::setBlocking(), setEnvironmentVariable(), Ceylan::System::StandardDirectory::StandardDirectory(), Ceylan::System::StandardFile::tell(), Ceylan::System::InputStream::Test(), Ceylan::System::Thread::threadCreationFailed(), Ceylan::Timestamp::Timestamp(), Ceylan::System::StandardFileSystemManager::touch(), Ceylan::System::StandardFile::unlockForReading(), Ceylan::System::StandardFile::unlockForWriting(), Ceylan::Network::Socket::write(), and Ceylan::System::Pipe::write().
Size Ceylan::System::FDRead | ( | FileDescriptor | fd, | |
Ceylan::Byte * | dataBuffer, | |||
Size | toReadBytesNumber | |||
) |
Reads from fd stream to dataBuffer toReadBytesNumber bytes.
Will raise an IOException if read fails.
FeatureNotAvailableException | if the file descriptor feature is not available, and IOException is a system error occurred. |
Definition at line 564 of file CeylanSystem.cc.
References explainError(), Ceylan::Network::explainSocketError(), getError(), Ceylan::Network::getSocketError(), read(), and Ceylan::toString().
Referenced by Ceylan::System::StandardFile::FromFDtoFD(), Ceylan::System::LibfatFile::FromFDtoFD(), Ceylan::System::StandardFile::read(), Ceylan::System::Pipe::read(), and Ceylan::System::LibfatFile::read().
Size Ceylan::System::FDWrite | ( | FileDescriptor | fd, | |
const Ceylan::Byte * | dataBuffer, | |||
Size | toWriteBytesNumber | |||
) |
Writes to fd stream from dataBuffer toWriteBytesNumber bytes.
Will raise an IOException if write fails.
FeatureNotAvailableException | if the file descriptor feature is not available, and IOException is a system error occurred. |
Definition at line 704 of file CeylanSystem.cc.
References explainError(), Ceylan::Network::explainSocketError(), getError(), Ceylan::Network::getSocketError(), Ceylan::toString(), and write().
Referenced by Ceylan::System::StandardFile::FromFDtoFD(), Ceylan::System::LibfatFile::FromFDtoFD(), Ceylan::System::StandardFile::write(), Ceylan::Network::Socket::write(), Ceylan::System::Pipe::write(), and Ceylan::System::LibfatFile::write().
Microsecond Ceylan::System::getAccuracyOfPreciseTime | ( | Microsecond * | minGap = 0 , |
|
Microsecond * | maxGap = 0 | |||
) |
Returns the mean runtime-computed actual accuracy if the precise time measurement, expressed in microseconds.
Result is of course one microsecond or more.
The accuracy is measured thanks to two successive calls to getPreciseTime. As most systems are running at 1 GHz or more, they should be able to execute about one instruction per nanosecond, or about 1000 instructions per microsecond. Assuming the instructions involved by the call to getPreciseTime are negligible compared to 1000 instructions, the result should be at least roughly accurate at the millisecond scale.
minGap | updates, if non-null, the pointed variable with the smallest measured duration. Should be the actual granularity of the underlying clock. | |
maxGap | updates, if non-null, the pointed variable with the maximal measured duration. |
SystemException | should a problem occur. |
Definition at line 1027 of file CeylanSystem.cc.
References Ceylan::Log::LogPlug::debug(), getDurationBetween(), getPreciseTime(), and Ceylan::toString().
Microsecond Ceylan::System::getActualDurationForSleep | ( | Microsecond | requestedMicroseconds, | |
Second | requestedSeconds = 0 | |||
) |
Sleeps, and returns the actual sleeping time corresponding to the requested sleeping time, expressed in seconds and microseconds.
requestedMicroseconds | the time to sleep, expressed in microseconds, in the [0, 1 000 000 [ range. | |
requestedSeconds | the full seconds to be waited, not more than an hour to avoid overflow of returned value. |
SystemException | if waiting or measuring time went wrong. |
Definition at line 1762 of file CeylanSystem.cc.
References basicSleep(), getDurationBetween(), and getPreciseTime().
Referenced by getSchedulingGranularity().
BatteryStatus Ceylan::System::GetBatteryStatus | ( | ) |
Returns the current battery status.
On the DS ARM9, the IPC system, namely the singleton FIFO, is expected to be already available (created and activated).
SystemException | if the operation failed. |
Definition at line 622 of file CeylanSystemInformation.cc.
References Ceylan::System::FIFO::GetActivatedFIFO(), Ceylan::System::FIFO::getBatteryStatus(), and Ceylan::System::FIFO::sendBatteryStatusRequest().
UnsignedLongInteger Ceylan::System::getBuffersMemorySize | ( | ) |
Returns the size of memory currently used by buffers, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 530 of file CeylanSystemInformation.cc.
References explainError().
DSType Ceylan::System::GetDSType | ( | ) |
Returns the type of the DS running the program.
SystemException | if the operation failed. |
Definition at line 657 of file CeylanSystemInformation.cc.
References Ceylan::System::FIFO::GetActivatedFIFO(), Ceylan::System::FIFO::getDSType(), and Ceylan::System::FIFO::sendDSTypeRequest().
Microsecond Ceylan::System::getDurationBetween | ( | Second | startingSecond, | |
Microsecond | startingMicrosecond, | |||
Second | stoppingSecond, | |||
Microsecond | stoppingMicrosecond | |||
) |
Returns the duration, in microseconds, between the two specified times, i.e.
duration = (stopping time) - (starting time).
SystemException | if the duration is strictly negative, or if duration is above MaximumDurationWithMicrosecondAccuracy, to prevent overflow. |
Definition at line 936 of file CeylanSystem.cc.
References MaximumDurationWithMicrosecondAccuracy, OneMillion, and Ceylan::toString().
Referenced by getAccuracyOfPreciseTime(), getActualDurationForSleep(), and getPreciseTimeCallDuration().
const string Ceylan::System::getEnvironmentVariable | ( | const std::string & | variableName | ) |
Returns the value of specified environment variable.
If the variable was not set, returns an empty string.
UtilsException | if this operation is not supported or failed. |
Definition at line 55 of file CeylanEnvironmentVariables.cc.
References explainError().
Referenced by Ceylan::System::FileLocator::addPathsFromEnvironmentVariable(), getShellName(), and isEnvironmentVariableSet().
ErrorCode Ceylan::System::getError | ( | ) |
Returns the error ID (errno).
Definition at line 189 of file CeylanSystem.cc.
Referenced by Ceylan::Network::AnonymousStreamSocket::AnonymousStreamSocket(), FDRead(), FDWrite(), getTime(), Ceylan::System::StandardFile::lockForReading(), Ceylan::System::InputStream::Select(), and Ceylan::System::InputStream::Test().
UnsignedLongInteger Ceylan::System::getFreeHighMemorySize | ( | ) |
Returns the size of currently available high memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 439 of file CeylanSystemInformation.cc.
References explainError().
UnsignedLongInteger Ceylan::System::getFreeSwapMemorySize | ( | ) |
Returns the size of currently available swap memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 349 of file CeylanSystemInformation.cc.
References explainError().
UnsignedLongInteger Ceylan::System::getFreeSystemMemorySize | ( | ) |
Returns the size of currently available main memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 224 of file CeylanSystemInformation.cc.
References explainError().
void Ceylan::System::getPreciseTime | ( | Second & | seconds, | |
Microsecond & | microsec | |||
) |
Returns the time since the Epoch (00:00:00 UTC, January 1, 1970), with up to a one microsecond accuracy, expressed as a pair containing the number of seconds and the number of microseconds elapsed.
On some platforms (Windows XP), accuracy is worse than 1 millisecond.
seconds | the variable which will be updated with the number of seconds elapsed. | |
microsec | the variable which will be updated with the number of microseconds elapsed. |
The returned number of seconds should be roughly equal to: 35 years * 365 days * 24 hours * 3600 seconds = 1 103 760 000 which does not risk overflow when stored in Uint32, whose maximum value is 4 294 967 295. For Pentiums, the rdtsc code fragment is accurate to one clock cycle.
Expect this call to last for about 3 microseconds on 2.6 Linux kernels.
SystemException | should a problem occur. |
Definition at line 984 of file CeylanSystem.cc.
References explainError().
Referenced by Ceylan::Maths::Random::WhiteNoiseGenerator::generateSeedFromCurrentTime(), getAccuracyOfPreciseTime(), getActualDurationForSleep(), getPreciseTimeCallDuration(), smartSleep(), and smartSleepUntil().
Microsecond Ceylan::System::getPreciseTimeCallDuration | ( | ) |
Returns the mean duration of a call to getPreciseTime.
Definition at line 1124 of file CeylanSystem.cc.
References getDurationBetween(), and getPreciseTime().
Referenced by smartSleep().
Microsecond Ceylan::System::getSchedulingGranularity | ( | ) |
Returns the run-time computed scheduling granularity of the time slice enforced by the operating system.
Sleeping for smaller durations will in general result in sleeping the duration corresponding to the granularity.
For example, with a scheduling granularity of 10 ms, sleeping for durations between 0 (excluded) and 10 ms (excluded) would result on an idle computer in a 10 ms sleep.
If the computer is loaded with other demanding processes, then the computed time slice will not be the kernel basic time slice (say, 10 ms) but an average time slice availability (say, 14 ms) since other processes use CPU time too. It is however the intended behaviour since this user application needs to rely on an actual availability rather than a theoritical one. This granularity will be relevant as long as the computer load will remain relatively constant during the application execution.
On Linux 2.6 kernels, the expected result (1 ms) is seldom found, the measures show on some computers a first stage, quite irregular, at 4 ms, with next stages at 8, 12, 16 ms etc., which are quite stable. The algorithm detects then a 8 ms granularity, which is recommended, as in the 4 ms stage (reached for requests between 0 and 4 ms), there is often a peak: asking for 0.5 ms yields a reproducible 25 ms sleeps!
Hence requesting 0.9*granularity should yied a reliable minimal waiting. Note that its duration will in most cases not be what was requested. For example, with a granularity reliably measured at 8 ms (ex: 7994 microsec), one should request 8000*0.9=7200 microsec and have a (reliable) 6500 microsec sleep instead.
SystemException | if the operation is not supported (file descriptor feature is needed) or if the measurement failed. |
Upper bound to time slice is 110 ms, to be able to catch as high as a 100 ms granularity (a frequency of less than 10Hz should be quite uncommon).
Definition at line 1799 of file CeylanSystem.cc.
References Ceylan::Maths::Abs(), Ceylan::System::File::close(), Ceylan::System::File::Create(), dataUtils::f, getActualDurationForSleep(), Ceylan::toString(), generalUtils::true, and Ceylan::System::File::write().
Referenced by atomicSleep(), and smartSleep().
UnsignedLongInteger Ceylan::System::getSecondsSinceSystemBoot | ( | ) |
Returns the uptime, the number of seconds since the system booted.
SystemException | on error, or if not implemented for this platform. |
Definition at line 97 of file CeylanSystemInformation.cc.
References explainError().
UnsignedLongInteger Ceylan::System::getSharedMemorySize | ( | ) |
Returns the size of memory currently being shared, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 484 of file CeylanSystemInformation.cc.
References explainError(), and getTotalSystemMemorySize().
string Ceylan::System::getShellName | ( | ) |
Returns the name of the default shell, if found, otherwise returns an empty string.
This is done by reading environment variable 'SHELL'.
Definition at line 227 of file CeylanSystem.cc.
References getEnvironmentVariable().
Second Ceylan::System::getTime | ( | ) |
Returns the current time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds.
Definition at line 832 of file CeylanSystem.cc.
References explainError(), and getError().
Referenced by Ceylan::Timestamp::Timestamp(), and Ceylan::Log::LogAggregatorHTML::WriteChannelFooter().
UnsignedLongInteger Ceylan::System::getTotalHighMemorySize | ( | ) |
Returns the total size of usable high memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 394 of file CeylanSystemInformation.cc.
References explainError().
Ceylan::Uint32 Ceylan::System::getTotalProcessCount | ( | ) |
Returns the current number of running processes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 133 of file CeylanSystemInformation.cc.
References explainError().
UnsignedLongInteger Ceylan::System::getTotalSwapMemorySize | ( | ) |
Returns the total size of swap memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 304 of file CeylanSystemInformation.cc.
References explainError().
UnsignedLongInteger Ceylan::System::getTotalSystemMemorySize | ( | ) |
Returns the total size of usable main memory, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 178 of file CeylanSystemInformation.cc.
References explainError().
Referenced by getSharedMemorySize().
UnsignedLongInteger Ceylan::System::getUsedSystemMemorySize | ( | ) |
Returns the size of main memory being currently used, in bytes.
SystemException | on error, or if not implemented for this platform. |
Definition at line 277 of file CeylanSystemInformation.cc.
string Ceylan::System::GetUserName | ( | ) |
Returns the name of the user, as retrieved from the system.
SystemException | on error, or if not implemented for this platform. |
On the NoCachGBA emulator, an empty string is returned.
Definition at line 581 of file CeylanSystemInformation.cc.
bool Ceylan::System::HasAvailableData | ( | FileDescriptor | fd | ) |
Tells whether there is data available on specified file descriptor.
Definition at line 515 of file CeylanSystem.cc.
References explainError(), and generalUtils::false.
Referenced by Ceylan::Network::Socket::hasAvailableData(), and Ceylan::System::Pipe::hasAvailableData().
void Ceylan::System::InitializeInterrupts | ( | bool | force = false |
) |
On platforms requiring it (ex: the Nintendo DS), initializes the interrupt system by using a default handler.
force | if true, the handler will be reset unconditionnally, if false it will be reset only if not already set (allows to perform it once for all at startup). |
SystemException | if an error occurred (if on the platform nothing has to be done, only a log warning will be issued, no exception will be thrown). |
Definition at line 244 of file CeylanSystem.cc.
References generalUtils::false, and generalUtils::true.
Referenced by atomicSleep(), basicSleep(), Ceylan::System::FIFO::FIFO(), Ceylan::getChar(), and Ceylan::keyboardHit().
void Ceylan::System::InitializeIPC | ( | ) |
On platforms requiring it (ex: the Nintendo DS), initializes the IPC system (Inter-Process Communication), by setting up the FIFO infrastructure (creation and activation).
SystemException | if an error occurred (if on the platform nothing has to be done, only a log warning will be issued, no exception will be thrown). |
Definition at line 322 of file CeylanSystem.cc.
References Ceylan::System::FIFO::activate().
bool Ceylan::System::isEnvironmentVariableSet | ( | const std::string & | variableName | ) |
Returns whether the specified environment variable is set.
Definition at line 46 of file CeylanEnvironmentVariables.cc.
References getEnvironmentVariable().
bool Ceylan::System::openGLContextsCanBeLost | ( | ) |
Tells whether the OpenGL contexts can be lost (and therefore may have to be reloaded) under certain unexpected circumstances (ex : window resize, going to fullscreen, switching to another application, etc.
) on the current platform, without specific notice.
On some platforms, the OpenGL contexts can be lost when :
SystemException | on error, or if not known for this platform. |
Definition at line 716 of file CeylanSystemInformation.cc.
References openGLContextsLostOnApplicationSwitch(), openGLContextsLostOnColorDepthChange(), and openGLContextsLostOnResize().
bool Ceylan::System::openGLContextsLostOnApplicationSwitch | ( | ) |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when switching to another application.
SystemException | on error, or if not known for this platform. |
Definition at line 755 of file CeylanSystemInformation.cc.
References generalUtils::false, and generalUtils::true.
Referenced by openGLContextsCanBeLost().
bool Ceylan::System::openGLContextsLostOnColorDepthChange | ( | ) |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when changing the color depth.
SystemException | on error, or if not known for this platform. |
Definition at line 783 of file CeylanSystemInformation.cc.
References generalUtils::false, and generalUtils::true.
Referenced by openGLContextsCanBeLost().
bool Ceylan::System::openGLContextsLostOnResize | ( | ) |
Tells whether the OpenGL contexts are lost (and therefore may have to be reloaded) when the window application is resized (resolution changed).
SystemException | on error, or if not known for this platform. |
Definition at line 727 of file CeylanSystemInformation.cc.
References generalUtils::false, and generalUtils::true.
Referenced by openGLContextsCanBeLost().
InterruptMask Ceylan::System::SetEnabledInterrupts | ( | InterruptMask | newMask = AllInterruptsDisabled |
) |
On platforms supporting it (ex: the Nintendo DS on the ARM9), sets the current set of interrupts enabled.
newMask | the masks describing all the interrupts that are to be enabled. By default (no parameter specified), all will be disabled. |
SystemException | if an error occurred. |
Definition at line 295 of file CeylanSystem.cc.
Referenced by Ceylan::System::FIFO::activate(), Ceylan::System::FIFO::deactivate(), Ceylan::System::FIFO::sendBatteryStatusRequest(), and Ceylan::System::FIFO::sendDSTypeRequest().
void Ceylan::System::setEnvironmentVariable | ( | const std::string & | variableName, | |
const std::string & | variableValue | |||
) |
Sets specified environment variable to the specified value.
UtilsException | if an error occured, which is very rare, and should be due to insufficient memory space to allocate the new environment. |
Definition at line 111 of file CeylanEnvironmentVariables.cc.
References explainError().
Referenced by unsetEnvironmentVariable().
bool Ceylan::System::setLegacyStreamSynchronization | ( | bool | synchronized | ) |
Sets whether the C++ standard streams (cin, cout, cerr, clog, and their wide-character counterparts) should be synchronized with their C-stream counterparts (this is the default situation).
Deactivating synchronization leads to substancial gains of speed for I/O operations operating on these streams, at the price of using only C++ streams (therefore the C-stream counterparts should not be used at all).
synchronized | if true, ensures C and C++ streams are synchronized (the default), if false no specific synchonization is performed. |
It is unclear whether file I/O can be impacted.
Definition at line 2036 of file CeylanSystem.cc.
void Ceylan::System::sleepForSeconds | ( | Second | secondCount | ) |
Sleeps for the specified number of seconds.
It makes the current process sleep until secondCount seconds have elapsed or a signal arrives which is not ignored.
SystemException | if the sleep failed. |
Definition at line 1163 of file CeylanSystem.cc.
References basicSleep().
bool Ceylan::System::smartSleep | ( | Second | secondCount, | |
Microsecond | microCount | |||
) |
Makes the process smartly sleep for the specified duration.
Smart sleep is the result of as many basic sleeps as needed to wait for the main part of the specified duration (which is the result of the integer division of the requested duration by the guessed time slice duration), followed by active waiting to complete the remaining part of the specified waiting time. Finally, the process should wait for the specified time with as small as possible resource use, and with a precision of a few microseconds, on a not too heavily loaded computer.
A preliminary call to getSchedulingGranularity should be performed first, so that the time slice evaluation, which is a lengthy process, is done before actual run. Otherwise the first call to smartSleep would return too late.
secondCount | the number of seconds to wait, should be in the range 0 to 4200 to avoid overflow. For longer periods, use multiple calls to smartSleep. | |
microCount | the remaining part of the time to wait, expressed as a number of microseconds. As full seconds should be taken into account with the parameter seconds, micros should be less than one second, i.e. should be in the range 0 to 10E6 - 1. |
SystemException | if a system call failed or if the necessary file descriptor feature is not available. |
Definition at line 1410 of file CeylanSystem.cc.
References atomicSleep(), basicSleep(), generalUtils::false, getPreciseTime(), getPreciseTimeCallDuration(), getSchedulingGranularity(), OneMillion, Ceylan::toString(), and generalUtils::true.
Referenced by smartSleepUntil().
bool Ceylan::System::smartSleepUntil | ( | Second | secondCount, | |
Microsecond | microCount | |||
) |
Makes the process smartly sleep until the specified time arrives.
secondCount | the number of seconds to wait for. | |
microCount | the microsecond to wait for, expressed as a number of microseconds. As full seconds should be taken into account with the parameter second, micros should be less than one second, i.e. should be in the range 0 to 10E6 - 1. |
SystemException | if a system call failed, or if specified time is in the past, or if the necessary file descriptor feature is not available. |
Definition at line 1727 of file CeylanSystem.cc.
References getPreciseTime(), OneMillion, smartSleep(), and Ceylan::toString().
string Ceylan::System::timeToString | ( | const time_t & | t | ) |
Converts the time moment into a human readable string.
SystemException | if the conversion is not available or failed. |
Definition at line 862 of file CeylanSystem.cc.
Referenced by Ceylan::Log::LogAggregatorHTML::WriteChannelFooter().
void Ceylan::System::unsetEnvironmentVariable | ( | const std::string & | variableName | ) |
Unsets specified environment variable.
UtilsException | if an error occured, which is very rare. |
Definition at line 176 of file CeylanEnvironmentVariables.cc.
References setEnvironmentVariable().
To specify that all interrupts are to disabled (null value).
Definition at line 145 of file CeylanSystem.cc.
Referenced by Ceylan::System::FIFO::activate(), CacheProtectedDelete(), CacheProtectedNew(), Ceylan::System::FIFO::deactivate(), initCeylanSound(), Ceylan::System::FIFO::sendBatteryStatusRequest(), and Ceylan::System::FIFO::sendDSTypeRequest().
The maximum number of seconds for durations to be evaluated with a microsecond accuracy, before an overflow may occur.
Definition at line 181 of file CeylanSystem.cc.
Referenced by getDurationBetween().