|
| FSNode () |
| Default contructor. More...
|
|
| FSNode (const String &cPath, int nOpenMode=O_RDONLY) |
| Construct a FSNode from a file path. More...
|
|
| FSNode (const Directory &cDir, const String &cName, int nOpenMode=O_RDONLY) |
| Construct a FSNode from directory and a name inside that directory. More...
|
|
| FSNode (const FileReference &cRef, int nOpenMode=O_RDONLY) |
| Construct a FSNode from a file reference. More...
|
|
| FSNode (int nFD) |
| Construct a FSNode from a file descriptor. More...
|
|
| FSNode (const FSNode &cNode) |
| Copy contructor. More...
|
|
virtual | ~FSNode () |
| Destructor. More...
|
|
virtual status_t | FDChanged (int nNewFD, const struct stat &sStat) |
|
virtual status_t | SetTo (const String &cPath, int nOpenMode=O_RDONLY) |
| Open a node using a path. More...
|
|
virtual status_t | SetTo (const Directory &cDir, const String &cPath, int nOpenMode=O_RDONLY) |
| Open a node using a dir/path pair. More...
|
|
virtual status_t | SetTo (const FileReference &cRef, int nOpenMode=O_RDONLY) |
| Open the node referred to by the given os::FileReference. More...
|
|
virtual status_t | SetTo (int nFD) |
| Make the FSNode represent an already open file. More...
|
|
virtual status_t | SetTo (const FSNode &cNode) |
| Copy another FSNode. More...
|
|
virtual void | Unset () |
| Reset the FSNode. More...
|
|
virtual bool | IsValid () const |
| Check if the node has been properly initialized. More...
|
|
virtual status_t | GetStat (struct stat *psStat, bool bUpdateCache=true) const |
|
virtual ino_t | GetInode () const |
|
virtual dev_t | GetDev () const |
|
virtual int | GetMode (bool bUpdateCache=false) const |
|
virtual off_t | GetSize (bool bUpdateCache=true) const |
|
virtual time_t | GetCTime (bool bUpdateCache=true) const |
|
virtual time_t | GetMTime (bool bUpdateCache=true) const |
|
virtual time_t | GetATime (bool bUpdateCache=true) const |
|
bool | IsDir () const |
|
bool | IsLink () const |
|
bool | IsFile () const |
|
bool | IsCharDev () const |
|
bool | IsBlockDev () const |
|
bool | IsFIFO () const |
|
virtual status_t | GetNextAttrName (String *pcName) |
| Read the node's attribute directory. More...
|
|
virtual status_t | RewindAttrdir () |
| Reset the attribute directory iterator. More...
|
|
virtual ssize_t | WriteAttr (const String &cAttrName, int nFlags, int nType, const void *pBuffer, off_t nPos, size_t nLen) |
| Add/update an attribute. More...
|
|
virtual ssize_t | ReadAttr (const String &cAttrName, int nType, void *pBuffer, off_t nPos, size_t nLen) |
| Read the data held by an attribute. More...
|
|
virtual status_t | RemoveAttr (const String &cName) |
| Remove an attribute from an FS node. More...
|
|
virtual status_t | StatAttr (const String &cName, struct::attr_info *psBuffer) |
| Get extended info about an attribute. More...
|
|
virtual int | GetFileDescriptor () const |
|
- Description:
- This class give access to the lowest level of a filesystem node. A node can be a directory, regular file, symlink or named pipe.
It give you access to stats that is common to all nodes in the filesystem like time-stamps, access-rights, inode and device numbers, and most imporant the file-attributes.
The native AtheOS filesystem (AFS) support "attributes" wich is extra data-streams associated with filesystem nodes. An attribute can have a specific type like int, float, string, etc etc, or it can be a untyped stream of data. Attributes can be used to store information associated by the file but that don't belong to file content itself (for example the file's icon-image and mime-type).
- See Also
- os::FileReference, os::File, os::Directory
- Author
- Kurt Skauen (kurt@.nosp@m.athe.nosp@m.os.cx)
status_t FSNode::SetTo |
( |
const String & |
cPath, |
|
|
int |
nOpenMode = O_RDONLY |
|
) |
| |
|
virtual |
- Description:
- Open a node by path. The path must be valid and the process must have access to it but it can point to any kind of FS-node (file, directory, symlink).
The path can start with "~/" to make it relative to the current users home directory or it can start with "^/" to make it relative to the directory where the executable our application was started from lives in. This path expansion is performed by the os::FSNode class itself and is not part of the low-level filesystem.
The nOpenMode
should be a compination of any of the O_* flags defined in <fcntl.h>. Their meaning is the same as when opening a file with the open() POSIX function except you can not create a file by setting the O_CREAT flag.
The following flags are accepted:
- O_RDONLY open the node read-only
- O_WRONLY open the node write-only
- O_RDWR open the node for both reading and writing
- O_TRUNC trunate the size to 0 (only valid for files)
- O_APPEND automatically move the file-pointer to the end of the file before each write (only valid for files)
- O_NONBLOCK open the file in non-blocking mode
- O_DIRECTORY fail if
cPath
don't point at a directory
- O_NOTRAVERSE open the symlink it self rather than it's target if
cPath
points at a symlink
- Note:
- If this call fail the old state of the FSNode will remain unchanged
- Parameters
-
cPath | Path pointing at the node to open. |
nOpenMode | Flags controlling how to open the node. |
- Returns
- On success 0 is returned. On error -1 is returned and a error code is assigned to the global variable "errno". The error code can be any of the errors returned by the open() POSIX function.
- Author
- Kurt Skauen (kurt@.nosp@m.athe.nosp@m.os.cx)
Reimplemented in os::SymLink.
References os::String::begin(), os::String::c_str(), os::String::end(), FDChanged(), os::FSNode::Private::m_nFD, os::String::size(), and os::String::str().
Referenced by os::Directory::CreateDirectory(), os::Directory::CreateFile(), os::FileReference::FileReference(), os_priv::DirKeeper::GetNode(), os::RegistrarManager::GetTypeAndIcon(), InfoWin::InfoWin(), os::RegistrarManager::RegisterTypeIconFromRes(), os::Directory::SetPath(), os::SymLink::SetTo(), os::FileReference::SetTo(), and os::TempFile::TempFile().
status_t FSNode::SetTo |
( |
const Directory & |
cDir, |
|
|
const String & |
cPath, |
|
|
int |
nOpenMode = O_RDONLY |
|
) |
| |
|
virtual |
- Description:
- Open a node by using a directory and a path relative to that directory.
The path can eighter be absolute (cDir
will then be ignored) or it can be relative to cDir
. This have much the same semantics as setting the current working directory to cDir
and then open the node by calling SetTo( const String& cPath, int nOpenMode ) with the path. The main advantage with this function is that it is thread-safe. You don't get any races while temporarily changing the current working directory.
For a more detailed description look at: SetTo( const String& cPath, int nOpenMode )
- Note
- If this call fail the old state of the FSNode will remain unchanged
- Parameters
-
cDir | A valid directory from which the cPath is relative to. |
cPath | The file path relative to cDir . The path can eighter be absoulute (in which case cDir is ignored) or it can be relative to cDir . |
nOpenMode | Flags controlling how to open the node. See SetTo( const String& cPath, int nOpenMode ) for a full description of the various flags. |
- Returns
- On success 0 is returned. On error -1 is returned and a error code is assigned to the global variable "errno". The error code can be any of the errors returned by the open() POSIX function.
- See Also
- FSNode( const String& cPath, int nOpenMode )
- Author
- Kurt Skauen (kurt@.nosp@m.athe.nosp@m.os.cx)
Reimplemented in os::SymLink.
References os::String::c_str(), FDChanged(), GetFileDescriptor(), IsValid(), and os::FSNode::Private::m_nFD.
ssize_t FSNode::WriteAttr |
( |
const String & |
cAttrName, |
|
|
int |
nFlags, |
|
|
int |
nType, |
|
|
const void * |
pBuffer, |
|
|
off_t |
nPos, |
|
|
size_t |
nLen |
|
) |
| |
|
virtual |
- Description:
- WriteAttr() is used to create new attributes and update existing attributes. A attribute is simply a chunc of data that is associated with the file but that is not part of the files regular data-stream. Attributes can be added to all kind's of FS nodes like regular files, directories, and symlinks.
A attribute can contain a untyped stream of data of an arbritary length or it can contain typed data like integers, floats, strings, etc etc. The reason for having typed data is to be able to make a search index that can be used to for efficient search for files based on their attributes. The indexing system is not fully implemented yet but will be part of Syllable in the future.
- Note:
- Currently only the Syllable native filesystem (AFS) support attributes so if the the file is not located on an AFS volume this member will fail.
- Parameters
-
cAttrName | The name of the attribute. The name must be unique inside the scope of the node it belongs to. If an attribute already exists with that name it will be overwritten. |
nFlags | Currently only O_TRUNC is accepted. If you pass in O_TRUNC and a attribute with the same name already exists it will be truncated to a size of 0 before the new attribute data is written. By passing in 0 you can update parts of or extend an existing attribute. |
nType | The data-type of the attribute. This should be one of the ATTR_TYPE_* types defined in <pyro/filesystem.h>. |
- ATTR_TYPE_NONE, Untyped "raw" data of any size.
- ATTR_TYPE_INT32, 32-bit integer value (the size must be exactly 4 bytes).
- ATTR_TYPE_INT64, 64-bit integer value often used for time-values (the size must be exactly 8 bytes).
- ATTR_TYPE_FLOAT, 32-bit floating point value (the size must be exactly 4 bytes).
- ATTR_TYPE_DOUBLE, 64-bit floating point value (the size must be exactly 8 bytes).
- ATTR_TYPE_STRING, UTF8 string. The string should not be NUL terminated.
- Parameters
-
pBuffer | Pointer to the data to be written. |
nPos | The offset into the attribute where the data will be written. |
nLen | Number of bytes to be written. |
- Returns
- On success the number of bytes actually written is returned. On failure -1 is returned and the error code is stored in the global variable "errno"
- See Also
- ReadAttr(), StatAttr()
- Author
- Kurt Skauen (kurt@.nosp@m.athe.nosp@m.os.cx)
References os::String::c_str(), and os::FSNode::Private::m_nFD.