Gamp: File Utilities (original) (raw)
File types and functionality. More...
| Classes | |
|---|---|
| class | jau::io::fs::dir_item |
| Representing a directory item split into dirname() and basename(). More... | |
| class | jau::io::fs::file_stats |
| Platform agnostic representation of POSIX ::lstat() and ::stat() for a given pathname. More... | |
| struct | jau::io::fs::mount_ctx |
| Typedefs | |
|---|---|
| typedef jau::function< void(const dir_item &)> | jau::io::fs::consume_dir_item |
| void consume_dir_item(const dir_item& item) | |
| typedef uint64_t | jau::io::fs::mountflags_t |
| Generic flag bit values for mount() flags. | |
| typedef jau::function< bool(traverse_event, const file_stats &, size_t)> | jau::io::fs::path_visitor |
| path_visitor jau::FunctionDef definition | |
| typedef int | jau::io::fs::umountflags_t |
| Generic flag bit values for umount() flags. | |
| Functions | ||
|---|---|---|
| std::string | jau::io::fs::absolute (std::string_view relpath) noexcept | |
| Returns the absolute path of given relpath if existing, otherwise an empty string. | ||
| std::string | jau::io::fs::basename (std::string_view path) noexcept | |
| Return stripped leading directory components from given path separated by /. | ||
| std::string | jau::io::fs::basename (std::string_view path, const std::vector< std::string_view > &suffixes) noexcept | |
| Return stripped leading directory components from given path separated by /, as well as removing the given suffixes, if existing at the end. | ||
| std::string | jau::io::fs::basename (std::string_view path, std::string_view suffix) noexcept | |
| Return stripped leading directory components from given path separated by /, as well as removing the given suffix, if existing at the end. | ||
| bool | jau::io::fs::chdir (const std::string &path) noexcept | |
| Change working directory. | ||
| bool | jau::io::fs::compare (const file_stats &source1, const file_stats &source2, const bool verbose=false) noexcept | |
| Compare the bytes of both files, denoted by source1 and source2. | ||
| bool | jau::io::fs::compare (const std::string &source1, const std::string &source2, const bool verbose=false) noexcept | |
| Compare the bytes of both files, denoted by source1 and source2. | ||
| bool | jau::io::fs::copy (const std::string &source_path, const std::string &dest_path, const copy_options copts=copy_options::none) noexcept | |
| Copy the given source_path to dest_path using copy_options. | ||
| std::string | jau::io::fs::dirname (std::string_view path) noexcept | |
| Return stripped last component from given path separated by /, excluding the trailing separator /. | ||
| bool | jau::io::fs::exists (const std::string &path, bool verbose_on_error=false) noexcept | |
| Returns true if path exists and is accessible. | ||
| int | jau::io::fs::from_named_fd (const std::string &named_fd) noexcept | |
| Returns the file descriptor from the given named file descriptor. | ||
| std::string | jau::io::fs::get_cwd () noexcept | |
| Return the current working directory or empty on failure. | ||
| bool | jau::io::fs::get_dir_content (const int dirfd, const std::string &path, const consume_dir_item &digest) noexcept | |
| Returns a list of directory elements excluding . | ||
| bool | jau::io::fs::get_dir_content (const std::string &path, const consume_dir_item &digest) noexcept | |
| Returns a list of directory elements excluding . | ||
| bool | jau::io::fs::isAbsolute (std::string_view path) noexcept | |
| Returns true if first character is / or - in case of Windows - \\. | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (copy_options, recursive, follow_symlinks, into_existing_dir, ignore_symlink_errors, overwrite, preserve_all, sync) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (fmode_t, sock, blk, chr, fifo, dir, file, link, no_access, not_existing) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (mountflags_linux, rdonly, nosuid, nodev, noexec, synchronous, remount, mandlock, dirsync, noatime, nodiratime, bind, move, rec, silent, posixacl, unbindable, private_, slave, shared, relatime, kernmount, i_version, strictatime, lazytime, active, nouser) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (traverse_event, symlink, file, dir_check_entry, dir_entry, dir_exit, dir_symlink) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (traverse_options, recursive, follow_symlinks, lexicographical_order, dir_check_entry, dir_entry, dir_exit) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING (umountflags_linux, force, detach, expire, nofollow) | ||
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING2 (file_stats::field_t, field_t, type, mode, nlink, uid, gid, atime, mtime, ctime, ino, size, blocks, btime) | ||
| std::string | jau::io::fs::lookup_asset_dir (const char *exe_path, const char *asset_file, const char *asset_install_subdir) noexcept | |
| Returns located asset directory if found, otherwise an empty string. | ||
| bool | jau::io::fs::mkdir (const std::string &path, const fmode_t mode=fmode_t::def_dir_prot, const bool verbose=false) noexcept | |
| Create directory. | ||
| mount_ctx | jau::io::fs::mount (const std::string &source, const std::string &target, const std::string &fs_type, const mountflags_t flags, const std::string &fs_options="") | |
| Attach the filesystem named in source to target using the given filesystem source directly. | ||
| mount_ctx | jau::io::fs::mount_image (const std::string &image_path, const std::string &target, const std::string &fs_type, const mountflags_t flags, const std::string &fs_options="") | |
| Attach the filesystem image named in image_path to target using an intermediate platform specific filesystem image loop-device. | ||
| std::ostream & | jau::io::fs::operator<< (std::ostream &os, const file_stats &v) | |
| constexpr ::mode_t | jau::io::fs::posix_protection_bits (const fmode_t mask) noexcept | |
| Returns the POSIX protection bits: rwx_all | set_uid | set_gid | |
| bool | jau::io::fs::remove (const std::string &path, const traverse_options topts=traverse_options::none) noexcept | |
| Remove the given path. | ||
| bool | jau::io::fs::rename (const std::string &oldpath, const std::string &newpath) noexcept | |
| Rename oldpath to newpath using POSIX rename(), with the following combinations. | ||
| void | jau::io::fs::sync () noexcept | |
| Synchronizes filesystems, i.e. | ||
| std::string | jau::io::fs::to_named_fd (const int fd) noexcept | |
| Returns platform dependent named file descriptor of given file descriptor, if supported. | ||
| std::string | jau::io::fs::to_string (const fmode_t mask, const bool show_rwx) noexcept | |
| Return the string representation of fmode_t. | ||
| bool | jau::io::fs::touch (const std::string &path, const fmode_t mode=fmode_t::def_file_prot) noexcept | |
| Touch the file with current time and create file if not existing yet. | ||
| bool | jau::io::fs::touch (const std::string &path, const jau::fraction_timespec &atime, const jau::fraction_timespec &mtime, const fmode_t mode=fmode_t::def_file_prot) noexcept | |
| Touch the file with given atime and mtime and create file if not existing yet. | ||
| bool | jau::io::fs::umount (const mount_ctx &context, const umountflags_t flags) | |
| Detach the given mount_ctx context | ||
| bool | jau::io::fs::umount (const std::string &target, const umountflags_t flags) | |
| Detach the topmost filesystem mounted on target optionally using given umountflags options if supported. | ||
| bool | jau::io::fs::visit (const file_stats &item_stats, const traverse_options topts, const path_visitor &visitor, std::vector< int > *dirfds=nullptr) noexcept | |
| Visit element(s) of a given path, see traverse_options for detailed settings. | ||
| bool | jau::io::fs::visit (const std::string &path, const traverse_options topts, const path_visitor &visitor, std::vector< int > *dirfds=nullptr) noexcept | |
| Visit element(s) of a given path, see traverse_options for detailed settings. | ||
File types and functionality.
◆ consume_dir_item
◆ path_visitor
path_visitor jau::FunctionDef definition
bool visitor([traverse_event](#ga20cadd2260c6066d33358d44afa15c37 "Filesystem traverse event used to call path_visitor for path elements from visit().") tevt, const [file_stats](classjau%5F1%5F1io%5F1%5F1fs%5F1%5F1file%5F%5Fstats.html "Platform agnostic representation of POSIX ::lstat() and ::stat() for a given pathname.")& item_stats, size_t depth)
Depth being the recursive directory depth starting with 1 for the initial directory.
Returning false stops traversal in general but traverse_options::dir_check_entry will only skip traversing the denied directory.
Definition at line 806 of file file_util.hpp.
◆ mountflags_t
typedef uint64_t jau::io::fs::mountflags_t
Generic flag bit values for mount() flags.
See mount(2) for a detailed description.
Definition at line 1056 of file file_util.hpp.
◆ umountflags_t
Generic flag bit values for umount() flags.
See umount(2) for a detailed description.
Definition at line 1148 of file file_util.hpp.
◆ fmode_t
| enum class jau::io::fs::fmode_t : uint32_t | strong |
|---|
Generic file type and POSIX protection mode bits as used in file_stats, touch(), mkdir() etc.
The POSIX protection mode bits reside in the lower 16-bits and are bit-wise POSIX compliant while the file type bits reside in the upper 16-bits and are platform agnostic.
This enum class type fulfills C++ named requirements: BitmaskType.
See also
| Enumerator | ||||||||
|---|---|---|---|---|---|---|---|---|
| none | No mode bit set. | |||||||
| set_uid | Protection bit: POSIX S_ISUID. | |||||||
| set_gid | Protection bit: POSIX S_ISGID. | |||||||
| sticky | Protection bit: POSIX S_ISVTX. | |||||||
| ugs_set | Protection bit: POSIX S_ISUID | S_ISGID | S_ISVTX. | ||||||
| read_usr | Protection bit: POSIX S_IRUSR. | |||||||
| write_usr | Protection bit: POSIX S_IWUSR. | |||||||
| exec_usr | Protection bit: POSIX S_IXUSR. | |||||||
| rwx_usr | Protection bit: POSIX S_IRWXU. | |||||||
| read_grp | Protection bit: POSIX S_IRGRP. | |||||||
| write_grp | Protection bit: POSIX S_IWGRP. | |||||||
| exec_grp | Protection bit: POSIX S_IXGRP. | |||||||
| rwx_grp | Protection bit: POSIX S_IRWXG. | |||||||
| read_oth | Protection bit: POSIX S_IROTH. | |||||||
| write_oth | Protection bit: POSIX S_IWOTH. | |||||||
| exec_oth | Protection bit: POSIX S_IXOTH. | |||||||
| rwx_oth | Protection bit: POSIX S_IRWXO. | |||||||
| rwx_all | Protection bit: POSIX S_IRWXU | S_IRWXG | S_IRWXO or rwx_usr | rwx_grp | rwx_oth. | ||||
| def_dir_prot | Default directory protection bit: Safe default: POSIX S_IRWXU | S_IRGRP | S_IXGRP or rwx_usr | read_grp | exec_grp. | ||||
| def_file_prot | Default file protection bit: Safe default: POSIX S_IRUSR | S_IWUSR | S_IRGRP or read_usr | write_usr | read_grp. | ||||
| protection_mask | 12 bit protection bit mask 07777 for rwx_all | set_uid | set_gid | sticky . | |||||
| sock | Type: Entity is a socket, might be in combination with link. | |||||||
| blk | Type: Entity is a block device, might be in combination with link. | |||||||
| chr | Type: Entity is a character device, might be in combination with link. | |||||||
| fifo | Type: Entity is a fifo/pipe, might be in combination with link. | |||||||
| dir | Type: Entity is a directory, might be in combination with link. | |||||||
| file | Type: Entity is a file, might be in combination with link. | |||||||
| link | Type: Entity is a symbolic link, might be in combination with file or dir, fifo, chr, blk or sock. | |||||||
| no_access | Type: Entity gives no access to user, exclusive bit. | |||||||
| not_existing | Type: Entity does not exist, exclusive bit. | |||||||
| type_mask | Type mask for sock | blk | chr | fifo | dir | file | link | no_access | not_existing. |
Definition at line 276 of file file_util.hpp.
◆ traverse_event
| enum class jau::io::fs::traverse_event : uint16_t | strong |
|---|
Filesystem traverse event used to call path_visitor for path elements from visit().
This enum class type fulfills C++ named requirements: BitmaskType.
See also
| Enumerator | |
|---|---|
| none | No value, neither file, symlink nor dir_entry or dir_exit. Implying an error state in file_stat, e.g. !file_stats::has_access(). |
| symlink | Visiting a symbolic-link, either to a file or a non-existing entity. Not followed symbolic-links to a directory is expressed via dir_symlink. In case of a symbolic-link to an existing file, file is also set, i.e. file_symlink. |
| file | Visiting a file, may be in conjunction with symlink, i.e. file_symlink. |
| file_symlink | Visiting a symlink to a file, i.e. symlink | file |
| dir_symlink | Visiting a symbolic-link to a directory which is not followed, i.e. traverse_options::follow_symlinks not set. |
| dir_check_entry | Visiting a directory on entry, see traverse_options::dir_check_entry. This allows the path_visitor to deny traversal into the directory by returning false, otherwise continuing traversal. |
| dir_entry | Visiting a directory on entry, see traverse_options::dir_entry. If a directory is visited non-recursive, i.e. traverse_options::recursive not set, dir_entry and dir_exit are set, see dir_non_recursive. If a directory is a symbolic link which is not followed, i.e. traverse_options::follow_symlinks not set, dir_symlink is used instead. |
| dir_exit | Visiting a directory on exit, see traverse_options::dir_exit. If a directory is visited non-recursive, i.e. traverse_options::recursive not set, dir_entry and dir_exit are set, see dir_non_recursive. If a directory is a symbolic link which is not followed, i.e. traverse_options::follow_symlinks not set, dir_symlink is used instead. |
| dir_non_recursive | Visiting a directory non-recursive, i.e. traverse_options::recursive not set. Value is a bit-mask of dir_entry | dir_exit |
Definition at line 736 of file file_util.hpp.
◆ traverse_options
| enum class jau::io::fs::traverse_options : uint16_t | strong |
|---|
Filesystem traverse options used to visit() path elements.
This enum class type fulfills C++ named requirements: BitmaskType.
See also
| Enumerator | |
|---|---|
| none | No option set. |
| recursive | Traverse through directories, i.e. perform visit, copy, remove etc actions recursively throughout the directory structure. |
| follow_symlinks | Traverse through symbolic linked directories if traverse_options::recursive is set, i.e. directories with property fmode_t::link set. |
| lexicographical_order | Traverse through elements in lexicographical order. This might be required when computing an order dependent outcome like a hash value. |
| dir_check_entry | Call path_visitor at directory entry, allowing path_visitor to skip traversal of this directory if returning false. |
| dir_entry | Call path_visitor at directory entry. Both, dir_entry and dir_exit can be set, only one or none. |
| dir_exit | Call path_visitor at directory exit. Both, dir_entry and dir_exit can be set, only one or none. |
| verbose | Enable verbosity mode, potentially used by a path_visitor implementation like remove(). |
Definition at line 816 of file file_util.hpp.
◆ copy_options
| enum class jau::io::fs::copy_options : uint16_t | strong |
|---|
Filesystem copy options used to copy() path elements.
By default, the fmode_t POSIX protection mode bits are preserved while using the caller's uid and gid as well as current timestamps.
Use copy_options::preserve_all to preserve uid and gid if allowed from the caller and access- and modification-timestamps.
This enum class type fulfills C++ named requirements: BitmaskType.
See also
| Enumerator | |
|---|---|
| none | No option set. |
| recursive | Traverse through directories, i.e. perform visit, copy, remove etc actions recursively throughout the directory structure. |
| follow_symlinks | Copy referenced symbolic linked files or directories instead of just the symbolic link with property fmode_t::link set. |
| into_existing_dir | Copy source dir content into an already existing destination directory as if destination directory did not exist. Otherwise, if destination directory already exist, the source directory will be copied below the destination directory. |
| ignore_symlink_errors | Ignore errors from erroneous symlinks, e.g. non-existing link-targets, recursive loop-errors.or unsupported symmlinks on target filesystem. This flag is required to copy erroneous non-existing symlinks if using follow_symlinks copy erroneous recursive loop-error symlinks if using follow_symlinks ignore symlinks if not supported by target filesystem if not using follow_symlinks |
| overwrite | Overwrite existing destination files. |
| preserve_all | Preserve uid and gid if allowed and access- and modification-timestamps, i.e. producing a most exact meta-data copy. |
| sync | Ensure data and meta-data file synchronization is performed via ::fsync() after asynchronous copy operations of a file's content. |
| verbose | Enable verbosity mode, show error messages on stderr. |
Definition at line 936 of file file_util.hpp.
◆ mountflags_linux
Flag bit values for mount() flags under GNU/Linux.
See mount(2) for a detailed description.
| Enumerator |
|---|
| none |
| rdonly |
| nosuid |
| nodev |
| noexec |
| synchronous |
| remount |
| mandlock |
| dirsync |
| noatime |
| nodiratime |
| bind |
| move |
| rec |
| silent |
| posixacl |
| unbindable |
| private_ |
| slave |
| shared |
| relatime |
| kernmount |
| i_version |
| strictatime |
| lazytime |
| active |
| nouser |
Definition at line 1063 of file file_util.hpp.
◆ umountflags_linux
Flag bit values for umount() flags under GNU/Linux.
See umount(2) for a detailed description.
| Enumerator |
|---|
| force |
| detach |
| expire |
| nofollow |
Definition at line 1155 of file file_util.hpp.
◆ get_cwd()
| std::string jau::io::fs::get_cwd ( ) | noexcept |
|---|
Return the current working directory or empty on failure.
Definition at line 86 of file file_util.cpp.
◆ chdir()
| bool jau::io::fs::chdir ( const std::string & path) | noexcept |
|---|
◆ absolute()
| std::string jau::io::fs::absolute ( std::string_view relpath) | noexcept |
|---|
Returns the absolute path of given relpath if existing, otherwise an empty string.
Parameters
| relpath | a path, might be relative |
|---|
Definition at line 106 of file file_util.cpp.
◆ dirname()
| std::string jau::io::fs::dirname ( std::string_view path) | noexcept |
|---|
Return stripped last component from given path separated by /, excluding the trailing separator /.
If no directory separator / is contained, return ..
If only the root path / is given, return /.
Parameters
Returns
leading directory name w/o slash or .
Definition at line 133 of file file_util.cpp.
◆ basename() [1/3]
| std::string jau::io::fs::basename ( std::string_view path) | noexcept |
|---|
Return stripped leading directory components from given path separated by /.
If only the root path / is given, return /.
Parameters
Returns
last non-slash component or .
Definition at line 155 of file file_util.cpp.
◆ basename() [2/3]
| std::string jau::io::fs::basename ( std::string_view path, std::string_view suffix ) | noexcept |
|---|
Return stripped leading directory components from given path separated by /, as well as removing the given suffix, if existing at the end.
If only the root path / is given, return /.
Parameters
| path | given path |
|---|---|
| suffix | suffix at end of path to be removed |
Returns
last non-slash component or .
Definition at line 176 of file file_util.cpp.
◆ basename() [3/3]
| std::string jau::io::fs::basename ( std::string_view path, const std::vector< std::string_view > & suffixes ) | noexcept |
|---|
Return stripped leading directory components from given path separated by /, as well as removing the given suffixes, if existing at the end.
If only the root path / is given, return /.
Parameters
| path | given path |
|---|---|
| suffixes | suffixes at end of path to be removed |
Returns
last non-slash component or .
Definition at line 190 of file file_util.cpp.
◆ isAbsolute()
| bool jau::io::fs::isAbsolute ( std::string_view path) | noexcept |
|---|
Returns true if first character is / or - in case of Windows - \\.
Definition at line 204 of file file_util.cpp.
◆ exists()
| bool jau::io::fs::exists ( const std::string & path, bool verbose_on_error = false ) | noexcept |
|---|
Returns true if path exists and is accessible.
Definition at line 209 of file file_util.cpp.
◆ lookup_asset_dir()
| std::string jau::io::fs::lookup_asset_dir ( const char * exe_path, const char * asset_file, const char * asset_install_subdir ) | noexcept |
|---|
Returns located asset directory if found, otherwise an empty string.
The asset dir is attempted as follows (cwd is current working dir)
- cwd/
resources/asset_file -> cwd/resources - dirname(exe_path)/../share/"+asset_install_subdir/asset_file -> dirname(exe_path)/../share/"+asset_install_subdir
Definition at line 220 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [1/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | fmode_t | , |
|---|---|---|---|
| sock | , | ||
| blk | , | ||
| chr | , | ||
| fifo | , | ||
| dir | , | ||
| file | , | ||
| link | , | ||
| no_access | , | ||
| not_existing | ) |
◆ to_string()
| std::string jau::io::fs::to_string ( const fmode_t mask, const bool show_rwx ) | noexcept |
|---|
Return the string representation of fmode_t.
Parameters
| mask | the fmode_t to convert |
|---|---|
| show_rwx | if true, return verbose POSIX protection bit string representation using rwx for user, group and others. Otherwise simply show the octal representation (default) |
Returns
the string representation.
Definition at line 415 of file file_util.cpp.
◆ posix_protection_bits()
| ::mode_t jau::io::fs::posix_protection_bits ( const fmode_t mask) | noexcept |
|---|
Returns the POSIX protection bits: rwx_all | set_uid | set_gid | sticky, i.e.
fmode_t masked with fmode_t::protection_mask.
Definition at line 360 of file file_util.hpp.
◆ to_named_fd()
| std::string jau::io::fs::to_named_fd ( const int fd) | noexcept |
|---|
Returns platform dependent named file descriptor of given file descriptor, if supported.
Implementation returns (d stands for integer):
/dev/fd/d(GNU/Linux, FreeBSD, ..)
Following standard POSIX mappings exist
- fd 0,
/dev/fd/0,/dev/stdin - fd 1,
/dev/fd/1,/dev/stdout - fd 2,
/dev/fd/2,/dev/stderr - fd [0-99],
/dev/fd/[0-99]
Currently implementation always returns above pattern, not handling the target OS differences.
Parameters
Returns
the named file descriptor or an empty string if fd < 0 or not supported by OS.
See also
jau::fs::from_named_fd()
jau::fs::file_stats:has_fd()
Definition at line 446 of file file_util.cpp.
◆ from_named_fd()
| int jau::io::fs::from_named_fd ( const std::string & named_fd) | noexcept |
|---|
Returns the file descriptor from the given named file descriptor.
Detected named file descriptors are (d stands for integer)
/dev/fd/d(GNU/Linux, FreeBSD, ..)/proc/self/fd/d(GNU/Linux)
Parameters
| named_fd | the named file descriptor |
|---|
Returns
file descriptor or -1 if invalid or not supported by OS.
See also
jau::fs::to_named_fd()
jau::fs::file_stats:has_fd()
Definition at line 455 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING2()
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING2 | ( | file_stats::field_t | , |
|---|---|---|---|
| field_t | , | ||
| type | , | ||
| mode | , | ||
| nlink | , | ||
| uid | , | ||
| gid | , | ||
| atime | , | ||
| mtime | , | ||
| ctime | , | ||
| ino | , | ||
| size | , | ||
| blocks | , | ||
| btime | ) |
◆ operator<<()
| std::ostream & jau::io::fs::operator<< ( std::ostream & os, const file_stats & v ) | inline |
|---|
◆ mkdir()
| bool jau::io::fs::mkdir ( const std::string & path, const fmode_t mode = fmode_t::def_dir_prot, const bool verbose = false ) | noexcept |
|---|
Create directory.
Parameters
| path | full path to new directory |
|---|---|
| mode | fmode_t POSIX protection bits used, defaults to jau::fs::fmode_t::def_dir_prot |
| verbose | defaults to false |
Returns
true if successful, otherwise false
Definition at line 932 of file file_util.cpp.
◆ touch() [1/2]
Touch the file with given atime and mtime and create file if not existing yet.
Parameters
| path | full path to file |
|---|---|
| atime | new access time |
| mtime | new modification time |
| mode | fmode_t POSIX protection bits used, defaults to jau::fs::fmode_t::def_file_prot |
Returns
true if successful, otherwise false
Definition at line 954 of file file_util.cpp.
◆ touch() [2/2]
| bool jau::io::fs::touch ( const std::string & path, const fmode_t mode = fmode_t::def_file_prot ) | noexcept |
|---|
Touch the file with current time and create file if not existing yet.
Parameters
| path | full path to file |
|---|---|
| mode | fmode_t POSIX protection bits used, defaults to jau::fs::fmode_t::def_file_prot |
Returns
true if successful, otherwise false
Definition at line 972 of file file_util.cpp.
◆ get_dir_content() [1/2]
| bool jau::io::fs::get_dir_content ( const std::string & path, const consume_dir_item & digest ) | noexcept |
|---|
Returns a list of directory elements excluding .
and .. for the given path, non recursive.
The custom consume_dir_item digest may also be used to filter the element, besides storing it.
Parameters
| path | path to directory |
|---|---|
| digest | consume_dir_item function to receive each directory item, e.g. void consume_dir_item(const dir_item& item) |
Returns
true if given path exists, is directory and is readable, otherwise false
Definition at line 989 of file file_util.cpp.
◆ get_dir_content() [2/2]
| bool jau::io::fs::get_dir_content ( const int dirfd, const std::string & path, const consume_dir_item & digest ) | noexcept |
|---|
Returns a list of directory elements excluding .
and .. for the given path, non recursive.
The custom consume_dir_item digest may also be used to filter the element, besides storing it.
Parameters
| dirfd | file descriptor to given path left untouched as a copy is being used to retrieve the directory content. |
|---|---|
| path | path to directory |
| digest | consume_dir_item function to receive each directory item, e.g. void consume_dir_item(const dir_item& item) |
Returns
true if given path exists, is directory and is readable, otherwise false
Definition at line 1007 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [2/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | traverse_event | , |
|---|---|---|---|
| symlink | , | ||
| file | , | ||
| dir_check_entry | , | ||
| dir_entry | , | ||
| dir_exit | , | ||
| dir_symlink | ) |
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [3/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | traverse_options | , |
|---|---|---|---|
| recursive | , | ||
| follow_symlinks | , | ||
| lexicographical_order | , | ||
| dir_check_entry | , | ||
| dir_entry | , | ||
| dir_exit | ) |
◆ visit() [1/2]
| bool jau::io::fs::visit ( const std::string & path, const traverse_options topts, const path_visitor & visitor, std::vector< int > * dirfds = nullptr ) | noexcept |
|---|
Visit element(s) of a given path, see traverse_options for detailed settings.
All elements of type fmode_t::file, fmode_t::dir and fmode_t::no_access or fmode_t::not_existing will be visited by the given path_visitor visitor.
Depth passed to path_visitor is the recursive directory depth and starts with 1 for the initial directory.
path_visitor returning false stops traversal in general but traverse_options::dir_check_entry will only skip traversing the denied directory.
Parameters
| path | the starting path |
|---|---|
| topts | given traverse_options for this operation |
| visitor | path_visitor function bool visitor(const file_stats& item_stats, size_t depth). |
| dirfds | optional empty dirfd stack pointer defaults to nullptr. If user provided, exposes the used dirfd stack, which last entry represents the currently visited directory. The dirfd stack starts and ends empty, i.e. all directory file descriptor are closed. In case of recursive directory traversion, the initial dir_entry visit starts with depth 1 and 2 fds, its parent and current directory. |
Returns
true if successful including no path_visitor stopped traversal by returning false excluding traverse_options::dir_check_entry.
Definition at line 1159 of file file_util.cpp.
◆ visit() [2/2]
| bool jau::io::fs::visit ( const file_stats & item_stats, const traverse_options topts, const path_visitor & visitor, std::vector< int > * dirfds = nullptr ) | noexcept |
|---|
Visit element(s) of a given path, see traverse_options for detailed settings.
All elements of type fmode_t::file, fmode_t::dir and fmode_t::no_access or fmode_t::not_existing will be visited by the given path_visitor visitor.
Depth passed to path_visitor is the recursive directory depth and starts with 1 for the initial directory.
path_visitor returning false stops traversal in general but traverse_options::dir_check_entry will only skip traversing the denied directory.
Parameters
| item_stats | pre-fetched file_stats for a given dir_item, used for efficiency |
|---|---|
| topts | given traverse_options for this operation |
| visitor | path_visitor function bool visitor(const file_stats& item_stats, size_t depth). |
| dirfds | optional empty dirfd stack pointer defaults to nullptr. If user provided, exposes the used dirfd stack, which last entry represents the currently visited directory. The dirfd stack starts and ends empty, i.e. all directory file descriptor are closed. In case of recursive directory traversion, the initial dir_entry visit starts with depth 1 and 2 fds, its parent and current directory. |
Returns
true if successful including no path_visitor stopped traversal by returning false excluding traverse_options::dir_check_entry.
Definition at line 1121 of file file_util.cpp.
◆ remove()
| bool jau::io::fs::remove ( const std::string & path, const traverse_options topts = traverse_options::none ) | noexcept |
|---|
Remove the given path.
If path represents a director, recursive must be set to true.
The given traverse_options options are handled as follows:
- traverse_options::parent_dir_last will be added by implementation to operate correct
- traverse_options::recursive shall shall be set by caller to remove directories
- traverse_options::follow_symlinks shall be set by caller to remove symbolic linked directories recursively, which is kind of dangerous. If not set, only the symbolic link will be removed (default)
Implementation is most data-race-free (DRF), utilizes following safeguards
- utilizing parent directory file descriptor and
openat()andunlinkat()operations against concurrent mutation
Parameters
| path | path to remove |
|---|---|
| topts | given traverse_options for this operation, defaults to traverse_options::none |
Returns
true only if the file or the directory with content has been deleted, otherwise false
Definition at line 1163 of file file_util.cpp.
◆ compare() [1/2]
| bool jau::io::fs::compare ( const file_stats & source1, const file_stats & source2, const bool verbose = false ) | noexcept |
|---|
Compare the bytes of both files, denoted by source1 and source2.
Parameters
| source1 | first source file to compare |
|---|---|
| source2 | second source file to compare |
| verbose | defaults to false |
Returns
true if both elements are files and their bytes are equal, otherwise false.
Definition at line 1258 of file file_util.cpp.
◆ compare() [2/2]
| bool jau::io::fs::compare ( const std::string & source1, const std::string & source2, const bool verbose = false ) | noexcept |
|---|
Compare the bytes of both files, denoted by source1 and source2.
Parameters
| source1 | first source file to compare |
|---|---|
| source2 | second source file to compare |
| verbose | defaults to false |
Returns
true if both elements are files and their bytes are equal, otherwise false.
Definition at line 1252 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [4/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | copy_options | , |
|---|---|---|---|
| recursive | , | ||
| follow_symlinks | , | ||
| into_existing_dir | , | ||
| ignore_symlink_errors | , | ||
| overwrite | , | ||
| preserve_all | , | ||
| sync | ) |
◆ copy()
| bool jau::io::fs::copy ( const std::string & source_path, const std::string & dest_path, const copy_options copts = copy_options::none ) | noexcept |
|---|
Copy the given source_path to dest_path using copy_options.
The behavior is similar like POSIX cp commandline tooling.
The following behavior is being followed regarding dest_path:
- If source_path is a directory and copy_options::recursive set
- If dest_path doesn't exist, source_path dir content is copied into the newly created dest_path.
- If dest_path exists as a directory, source_path dir will be copied below the dest_path directory if copy_options::into_existing_dir is not set. Otherwise its content is copied into the existing dest_path.
- Everything else is considered an error
- If source_path is a file
- If dest_path doesn't exist, source_path file is copied to dest_path as a file.
- If dest_path exists as a directory, source_path file will be copied below the dest_path directory.
- If dest_path exists as a file, copy_options::overwrite must be set to have it overwritten by the source_path file
- Everything else is considered an error
Implementation either uses ::sendfile() if running under GNU/Linux, otherwise POSIX read() and write().
Implementation is most data-race-free (DRF), utilizes following safeguards on recursive directory copy
- utilizing parent directory file descriptor and
openat()operations against concurrent mutation - for each entered directory
- new destination directory is create with '.<random_number>' and user-rwx permissions only
- its file descriptor is being opened
- its user-read permission is dropped, remains user-wx permissions only
- its renamed to destination path
- all copy operations are performed inside
- at exit, its permissions are restored, etc.
See copy_options for details.
Parameters
| source_path |
|---|
| dest_path |
| copts |
Returns
true if successful, otherwise false
Definition at line 1687 of file file_util.cpp.
◆ rename()
| bool jau::io::fs::rename ( const std::string & oldpath, const std::string & newpath ) | noexcept |
|---|
Rename oldpath to newpath using POSIX [rename()](#gafe02ba00681b0c342b11edbd9a1fa16c "Rename oldpath to newpath using POSIX rename(), with the following combinations."), with the following combinations.
- oldpath and newpath refer to the same file, a successful no-operation.
- oldpath file
- newpath not-existing file
- newpath existing file to be atomically replaced
- oldpath directory
- newpath not-existing directory
- newpath existing empty directory
- oldpath symlink will be renamed
- newpath symlink will be overwritten
Parameters
| oldpath | previous path |
|---|---|
| newpath | new path |
Returns
true only if the rename operation was successful, otherwise false
Definition at line 1883 of file file_util.cpp.
◆ sync()
| void jau::io::fs::sync ( ) | noexcept |
|---|
Synchronizes filesystems, i.e.
all pending modifications to filesystem metadata and cached file data will be written to the underlying filesystems.
Definition at line 1899 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [5/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | mountflags_linux | , |
|---|---|---|---|
| rdonly | , | ||
| nosuid | , | ||
| nodev | , | ||
| noexec | , | ||
| synchronous | , | ||
| remount | , | ||
| mandlock | , | ||
| dirsync | , | ||
| noatime | , | ||
| nodiratime | , | ||
| bind | , | ||
| move | , | ||
| rec | , | ||
| silent | , | ||
| posixacl | , | ||
| unbindable | , | ||
| private_ | , | ||
| slave | , | ||
| shared | , | ||
| relatime | , | ||
| kernmount | , | ||
| i_version | , | ||
| strictatime | , | ||
| lazytime | , | ||
| active | , | ||
| nouser | ) |
◆ mount_image()
| jau::io::fs::mount_ctx jau::io::fs::mount_image | ( | const std::string & | image_path, |
|---|---|---|---|
| const std::string & | target, | ||
| const std::string & | fs_type, | ||
| const mountflags_t | flags, | ||
| const std::string & | fs_options = "" ) |
Attach the filesystem image named in image_path to target using an intermediate platform specific filesystem image loop-device.
This method either requires root permissions
or the following capabilities: cap_sys_admin,cap_setuid, cap_setgid.
Unmounting shall be done via umount() with mount_ctx argument to ensure all intermediate resources are released.
Parameters
| image_path | path of image source file |
|---|---|
| target | directory where image_path filesystem shall be attached to |
| fs_type | type of filesystem, e.g. squashfs, tmpfs, iso9660, etc. |
| flags | filesystem agnostic mount flags, see mountflags_linux. |
| fs_options | comma separated options for the filesystem fs_type, see mount(8) for available options for the used filesystem. |
Returns
mount_ctx structure containing mounted status etc
See also
Definition at line 1911 of file file_util.cpp.
◆ mount()
| mount_ctx jau::io::fs::mount | ( | const std::string & | source, |
|---|---|---|---|
| const std::string & | target, | ||
| const std::string & | fs_type, | ||
| const mountflags_t | flags, | ||
| const std::string & | fs_options = "" ) |
Attach the filesystem named in source to target using the given filesystem source directly.
This method either requires root permissions
or the following capabilities: cap_sys_admin,cap_setuid, cap_setgid.
Parameters
| source | filesystem path for device, directory, file or dummy-string which shall be attached |
|---|---|
| target | directory where source filesystem shall be attached to |
| fs_type | type of filesystem, e.g. squashfs, tmpfs, iso9660, etc. |
| flags | filesystem agnostic mount flags, see mountflags_linux. |
| fs_options | comma separated options for the filesystem fs_type, see mount(8) for available options for the used filesystem. |
Returns
mount_ctx structure containing mounted status etc
See also
Definition at line 2038 of file file_util.cpp.
◆ JAU_MAKE_BITFIELD_ENUM_STRING() [6/6]
| jau::io::fs::JAU_MAKE_BITFIELD_ENUM_STRING | ( | umountflags_linux | , |
|---|---|---|---|
| force | , | ||
| detach | , | ||
| expire | , | ||
| nofollow | ) |
◆ umount() [1/2]
| bool jau::io::fs::umount | ( | const mount_ctx & | context, |
|---|---|---|---|
| const umountflags_t | flags ) |
Detach the given mount_ctx context
This method either requires root permissions
or the following capabilities: cap_sys_admin,cap_setuid, cap_setgid.
Parameters
| context | mount_ctx previously attached via mount_image() or mount() |
|---|---|
| flags | optional umount options, if supported by the system. See umount_options_linux. |
Returns
true if successful, otherwise false
See also
Definition at line 2114 of file file_util.cpp.
◆ umount() [2/2]
| bool jau::io::fs::umount | ( | const std::string & | target, |
|---|---|---|---|
| const umountflags_t | flags ) |
Detach the topmost filesystem mounted on target optionally using given umountflags options if supported.
This method either requires root permissions
or the following capabilities: cap_sys_admin,cap_setuid, cap_setgid.
Parameters
| target | directory of previously attached filesystem |
|---|---|
| flags | optional umount options, if supported by the system. See umount_options_linux. |
Returns
true if successful, otherwise false
See also
Definition at line 2200 of file file_util.cpp.