package b0
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha512=e9aa779e66c08fc763019f16d4706f465d16c05d6400b58fbd0313317ef33ddea51952e2b058db28e65f7ddb7012f328c8bf02d8f1da17bb543348541a2587f0
doc/b0.std/B0_std/Os/Dir/index.html
Module Os.DirSource
Directory operations.
This module operates on directories, most functions error if they are applied to other file kinds.
Existence
exists dir is Ok true if dir is a directory in the file system and Ok false otherwise. Symbolic links are followed.
must_exist dir is Ok () if dir is a directory in the file system and an error otherwise. Symbolic links are followed.
Creating
create ~mode ~make_path dir creates the directory dir.
modeare the file permission ofdir. They default to0o755(readable and traversable by everyone, writeable by the user).- If
make_pathistrueand the parent directory ofpdoes not exist the whole path to the parent is created as needed with permission0o755(readable and traversable by everyone, writable by the user)
The result is:
Ok trueifdirdid not exist and was created.Ok falseifdirdid exist as (possibly a symlink to) a directory. In this case the mode ofdirand any other directory is kept unchanged.Error _otherwise and in particular ifdirexists as a non-directory.
Contents
val fold :
?rel:bool ->
?dotfiles:bool ->
?follow_symlinks:bool ->
?prune_dir:(Unix.stats -> string -> Fpath.t -> 'a -> bool) ->
recurse:bool ->
(Unix.stats -> string -> Fpath.t -> 'a -> 'a) ->
Fpath.t ->
'a ->
('a, string) resultfold ~rel ~dotfiles ~follow_symlinks ~prune_dir ~recurse f dir acc folds f over the contents of dir starting with acc. If dir does not exist the function errors. Paths given to prune and f do not have a trailing /.
f st name p accis called with each pathpfolded over withstits stat information,nameits filename andaccthe accumulator.- If
recurseistruesub-directoriesdirare folded over recursively moduloprune(see below). Ifrecurseis false only the direct contents ofdiris folded over. prune_diris called only whenrecurseistrueasprune st dwithdany sub-directory to be folded over andstits stat information. If the result istruedand its contents are not folded over. Defaults tofun _ _ _ _ -> falsefollow_symlinksiftrue(default), symbolic links are followed. Iffalsesymbolic links are not followed and the stat information given topruneandfis given byPath.symlink_stat.- If
dotfilesisfalse(default) elements whose filename start with a.are not folded over - If
relisfalse(default) the paths given tofandprunehavedirprepended, iftruethey are relative todir.
Fold order. The fold order is generally undefined. The only guarantee is that directory paths are folded over before their content.
Warning. Given the raciness of the POSIX file API it cannot be guaranteed that really all existing files will be folded over in presence of other processes.
val fold_files :
?rel:bool ->
?dotfiles:bool ->
?follow_symlinks:bool ->
?prune_dir:(Unix.stats -> string -> Fpath.t -> 'a -> bool) ->
recurse:bool ->
(Unix.stats -> string -> Fpath.t -> 'a -> 'a) ->
Fpath.t ->
'a ->
('a, string) resultfold_files is like fold but f is only applied to non-directory files.
val fold_dirs :
?rel:bool ->
?dotfiles:bool ->
?follow_symlinks:bool ->
?prune_dir:(Unix.stats -> string -> Fpath.t -> 'a -> bool) ->
recurse:bool ->
(Unix.stats -> string -> Fpath.t -> 'a -> 'a) ->
Fpath.t ->
'a ->
('a, string) resultfold_dirs is like fold but f is only applied to directory files.
prune_denied is a prune function for folds to skip directories for which the user has no R_OK and X_OK permissions.
path_list is a folding function to get a (reverse w.r.t. list of paths). Paths in the result that correspond to directories satisfy Fpath.is_syntactic_dir.
Copying
val copy :
?rel:bool ->
?atomic:bool ->
?follow_symlinks:bool ->
?prune:(Unix.stats -> string -> Fpath.t -> bool) ->
make_path:bool ->
recurse:bool ->
Fpath.t ->
dst:Fpath.t ->
(unit, string) resultcopy ~rel ~atomic ~prune ~follow_symlinks ~make_path ~recurse ~src dst copies the directory src to dst. File modes of src and its contents are preserved in dst. The function errors if dst exists.
- If
recurseistruesub-directories ofdirare also copied recursively, unless they arepruned (see below). Iffalseonly the files ofsrcare copied moduloprune. FIXME I think this is weird - If
make_pathistrueand the parent directory ofdstdoes not exist the whole path to the parent is created as needed with permission0o755(readable and traversable by everyone, writable by the user). prune st name pis called on each pathpto copy withstits stat information andnameits filename. If the function returnstruethe directory or file is not copied over. Defaults tofun _ _ _ -> false.- If
follow_symlinksistrue(default), symlinks are followed. Iffalsesymbolic links are not followed, the actual symlinks are copied and the stat information given topruneis given byOs.Path.symlink_stat. atomicif atomic istrueand the function errors thendstshould not exist. To write atomically, a temporary directorytin the parent directory ofdstis created. On copy successtis renamed todst. On errortis deleted anddstleft intact. This means the user needs write permissions in the parent directory ofdst, in practice this is almost always the case but fails for some directories (e.g. writing in/syson Linux®).- If
relisfalse(default) the paths given toprunehavesrcprepended. Iftruethey are relative tosrc.
Current working directory (cwd)
cwd () is the current working directory. The resulting path is guaranteed to be absolute.
set_cwd dir sets the current working directory to dir.
with_cwd dir f is f () with the current working directory bound to dir. After the function returns the current working directory is back to its initial value.
Default temporary directory
default_tmp () is a default directory that can be used as a default directory for creating temporary files and directories. If set_default_tmp hasn't been called this is:
- On POSIX, the value of the
TMPDIRenvironment variable orFpath.v "/tmp"if the variable is not set or empty. - On Windows, the value of the
TEMPenvironment variable orFpath.v "."if it is not set or empty.
set_default_tmp p sets the value returned by default_tmp to p.
Temporary directories
See also temporary paths.
val with_tmp :
?mode:int ->
?make_path:bool ->
?dir:Fpath.t ->
?name:Path.tmp_name ->
(Fpath.t -> 'a) ->
('a, string) resultwith_tmp ~mode ~make_path ~dir ~name f creates a temporary empty directory t and returns Ok (f t). After the function returns (normally or via an exception) t and its content are deleted.
nameis used to construct the filename of the directory, seeB0_std.Os.Path.tmp_namefor details. It defaults to"tmp-%s".diris the directory in which the temporary file is created. It defaults toB0_std.Os.Dir.default_tmp.- If
make_pathistrue(default) anddirdoesn't exist the whole path to it is created as needed with permission0o755(readable and traversable by everyone, writable by the user). modeare the permissions of the temporary directory; they default to0o700, only readable, writeable and traversable by the user
val tmp :
?mode:int ->
?make_path:bool ->
?dir:Fpath.t ->
?name:Path.tmp_name ->
unit ->
(Fpath.t, string) resulttmp is like with_tmp except the directory and its content is only deleted at the end of program execution if the client doesn't do it before.
Base directories
The directories returned by these functions are not guaranteed to exist.
user () is the home directory of the user executing the process. Determined by consulting passwd database with the user if of the process. If this fails falls back to parse a path from the HOME environment variables. On Windows no special fallback is implemented.
config () is the directory used to store user-specific program configurations. This is in order:
- If set the value of
XDG_CONFIG_HOME. - If set and on Windows® the value of
APPDATA. - If
user ()isOk home,Fpath.(home / ".config").
data () is the directory used to store user-specific program data. This is in order:
- If set the value of
XDG_DATA_HOME. - If set and on Windows® the value of
APPDATA. - If
user ()isOk home,Fpath.(home / ".local" / "share").
cache () is the directory used to store user-specific non-essential data. This is in order:
- If set the value of
XDG_CACHE_HOME. - If set and on Windows® the value of
%TEMP% - If
user ()isOk home,Fpath.(home / ".cache")
runtime () is the directory used to store user-specific runtime files. This is in order:
- If set the value of
XDG_RUNTIME_HOME. - The value of
default_tmp.