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.
Enumerations
enum class jau::io::fs::copy_options : uint16_t { jau::io::fs::copy_options::none = 0 , jau::io::fs::copy_options::recursive = 1 << 0 , jau::io::fs::copy_options::follow_symlinks = 1 << 1 , jau::io::fs::copy_options::into_existing_dir = 1 << 2 , jau::io::fs::copy_options::ignore_symlink_errors = 1 << 8 , jau::io::fs::copy_options::overwrite = 1 << 9 , jau::io::fs::copy_options::preserve_all = 1 << 10 , jau::io::fs::copy_options::sync = 1 << 11 , jau::io::fs::copy_options::verbose = 1 << 15 }
Filesystem copy options used to copy() path elements. More...
enum class jau::io::fs::fmode_t : uint32_t { jau::io::fs::fmode_t::none = 0 , jau::io::fs::fmode_t::set_uid = 04000 , jau::io::fs::fmode_t::set_gid = 02000 , jau::io::fs::fmode_t::sticky = 01000 , jau::io::fs::fmode_t::ugs_set = 07000 , jau::io::fs::fmode_t::read_usr = 00400 , jau::io::fs::fmode_t::write_usr = 00200 , jau::io::fs::fmode_t::exec_usr = 00100 , jau::io::fs::fmode_t::rwx_usr = 00700 , jau::io::fs::fmode_t::read_grp = 00040 , jau::io::fs::fmode_t::write_grp = 00020 , jau::io::fs::fmode_t::exec_grp = 00010 , jau::io::fs::fmode_t::rwx_grp = 00070 , jau::io::fs::fmode_t::read_oth = 00004 , jau::io::fs::fmode_t::write_oth = 00002 , jau::io::fs::fmode_t::exec_oth = 00001 , jau::io::fs::fmode_t::rwx_oth = 00007 , jau::io::fs::fmode_t::rwx_all = 00777 , jau::io::fs::fmode_t::def_dir_prot = 00750 , jau::io::fs::fmode_t::def_file_prot = 00640 , jau::io::fs::fmode_t::protection_mask = 0b00000000000000000000111111111111 , jau::io::fs::fmode_t::sock = 0b00000000000000000001000000000000 , jau::io::fs::fmode_t::blk = 0b00000000000000000010000000000000 , jau::io::fs::fmode_t::chr = 0b00000000000000000100000000000000 , jau::io::fs::fmode_t::fifo = 0b00000000000000001000000000000000 , jau::io::fs::fmode_t::dir = 0b00000000000000010000000000000000 , jau::io::fs::fmode_t::file = 0b00000000000000100000000000000000 , jau::io::fs::fmode_t::link = 0b00000000000001000000000000000000 , jau::io::fs::fmode_t::no_access = 0b00100000000000000000000000000000 , jau::io::fs::fmode_t::not_existing = 0b01000000000000000000000000000000 , jau::io::fs::fmode_t::type_mask = 0b01100000000001111111000000000000 }
Generic file type and POSIX protection mode bits as used in file_stats, touch(), mkdir() etc. More...
enum class jau::io::fs::mountflags_linux : mountflags_t { jau::io::fs::mountflags_linux::none = 0 , jau::io::fs::mountflags_linux::rdonly = 1 , jau::io::fs::mountflags_linux::nosuid = 2 , jau::io::fs::mountflags_linux::nodev = 4 , jau::io::fs::mountflags_linux::noexec = 8 , jau::io::fs::mountflags_linux::synchronous = 16 , jau::io::fs::mountflags_linux::remount = 32 , jau::io::fs::mountflags_linux::mandlock = 64 , jau::io::fs::mountflags_linux::dirsync = 128 , jau::io::fs::mountflags_linux::noatime = 1024 , jau::io::fs::mountflags_linux::nodiratime = 2048 , jau::io::fs::mountflags_linux::bind = 4096 , jau::io::fs::mountflags_linux::move = 8192 , jau::io::fs::mountflags_linux::rec = 16384 , jau::io::fs::mountflags_linux::silent = 32768 , jau::io::fs::mountflags_linux::posixacl = 1 << 16 , jau::io::fs::mountflags_linux::unbindable = 1 << 17 , jau::io::fs::mountflags_linux::private_ = 1 << 18 , jau::io::fs::mountflags_linux::slave = 1 << 19 , jau::io::fs::mountflags_linux::shared = 1 << 20 , jau::io::fs::mountflags_linux::relatime = 1 << 21 , jau::io::fs::mountflags_linux::kernmount = 1 << 22 , jau::io::fs::mountflags_linux::i_version = 1 << 23 , jau::io::fs::mountflags_linux::strictatime = 1 << 24 , jau::io::fs::mountflags_linux::lazytime = 1 << 25 , jau::io::fs::mountflags_linux::active = 1 << 30 , jau::io::fs::mountflags_linux::nouser = 1UL << 31 }
Flag bit values for mount() flags under GNU/Linux. More...
enum class jau::io::fs::traverse_event : uint16_t { jau::io::fs::traverse_event::none = 0 , jau::io::fs::traverse_event::symlink = 1 << 0 , jau::io::fs::traverse_event::file = 1 << 1 , jau::io::fs::traverse_event::file_symlink = symlink | file , jau::io::fs::traverse_event::dir_symlink = 1 << 2 , jau::io::fs::traverse_event::dir_check_entry = 1 << 7 , jau::io::fs::traverse_event::dir_entry = 1 << 8 , jau::io::fs::traverse_event::dir_exit = 1 << 9 , jau::io::fs::traverse_event::dir_non_recursive = dir_entry dir_exit }
Filesystem traverse event used to call path_visitor for path elements from visit(). More...
enum class jau::io::fs::traverse_options : uint16_t { jau::io::fs::traverse_options::none = 0 , jau::io::fs::traverse_options::recursive = 1U << 0 , jau::io::fs::traverse_options::follow_symlinks = 1U << 1 , jau::io::fs::traverse_options::lexicographical_order = 1U << 2 , jau::io::fs::traverse_options::dir_check_entry = 1U << 7 , jau::io::fs::traverse_options::dir_entry = 1U << 8 , jau::io::fs::traverse_options::dir_exit = 1U << 9 , jau::io::fs::traverse_options::verbose = 1U << 15 }
Filesystem traverse options used to visit() path elements. More...
enum class jau::io::fs::umountflags_linux : umountflags_t { jau::io::fs::umountflags_linux::force = 1 , jau::io::fs::umountflags_linux::detach = 2 , jau::io::fs::umountflags_linux::expire = 4 , jau::io::fs::umountflags_linux::nofollow = 8 }
Flag bit values for umount() flags under GNU/Linux. More...
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

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

file_stats

file_stats::mode()

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

path_visitor

visit()

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

visit()

remove()

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

copy()

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)

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):

Following standard POSIX mappings exist

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)

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:

Implementation is most data-race-free (DRF), utilizes following safeguards

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:

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

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.

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

mountflags_t

mountflags_linux

mount()

umount()

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

mountflags_t

mountflags_linux

mount_image()

umount()

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

umountflags_t

umountflags_linux

mount()

mount_image()

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

umountflags_t

umountflags_linux

mount()

mount_image()

Definition at line 2200 of file file_util.cpp.