package shell
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=ec30eaec1b95543bdad774f378f2d90e5f271a1c734c1a4e8f5c1ac0872b5116
md5=db24c0f66777493987436aed423aec76
doc/shell.unix_extended/Unix_extended/index.html
Module Unix_extended
Extensions to Core.Unix
.
val fork_exec :
?stdin:Core.Unix.File_descr.t ->
?stdout:Core.Unix.File_descr.t ->
?stderr:Core.Unix.File_descr.t ->
?path_lookup:bool ->
?env:
[ `Extend of (string * string) list | `Replace of (string * string) list ] ->
?working_dir:string ->
?setuid:int ->
?setgid:int ->
string ->
string list ->
Core.Pid.t
fork_exec prog args ~stdin ~stdout ~stderr ~setuid ~setgid
forks a new process that executes the program in file prog
, with arguments args
. The pid of the new process is returned immediately; the new process executes concurrently with the current process.
The function raises EPERM if when using set{gid,uid}
and the user id is not 0.
The standard input and outputs of the new process are connected to the descriptors stdin
, stdout
and stderr
.
The close_on_exec flag is cleared from stderr
stdout
and stdin
so it's safe to pass in fds with close_on_exec
set.
ERRORS: Unix.unix_error. This function should not raise EINTR; it will restart itself automatically.
RATIONAL: setuid
and setgid
do not do a full id drop (e.g.: they save the id in saved id) when the user does not have the privileges required to setuid to anyone.
By default all file descriptors should be set_closexec ASAP after being open to avoid being captured in parallel execution of fork_exec; resetting the closexec flag on the forked flag is a cleaner and more thread safe approach.
BUGS: The capabilities for setuid in linux are not tied to the uid 0 (man 7 capabilities). It is still fair to assume that under most system this capability is there IFF uid == 0. A more fine grain permissionning approach would make this function non-portable and be hard to implement in an async-signal-way.
Because this function keeps the lock for most of its lifespan and restarts automatically on EINTR it might prevent the OCaml signal handlers to run in that thread.
type statvfs = {
bsize : int;
(*file system block size
*)frsize : int;
(*fragment size
*)blocks : int;
(*size of fs in frsize units
*)bfree : int;
(*# free blocks
*)bavail : int;
(*# free blocks for non-root
*)files : int;
(*# inodes
*)ffree : int;
(*# free inodes
*)favail : int;
(*# free inodes for non-root
*)fsid : int;
(*file system ID
*)flag : int;
(*mount flags
*)namemax : int;
(*maximum filename length
*)
}
val sexp_of_statvfs : statvfs -> Ppx_sexp_conv_lib.Sexp.t
val statvfs_of_sexp : Ppx_sexp_conv_lib.Sexp.t -> statvfs
val bin_size_statvfs : statvfs Core.Bin_prot.Size.sizer
val bin_write_statvfs : statvfs Core.Bin_prot.Write.writer
val bin_writer_statvfs : statvfs Core.Bin_prot.Type_class.writer
val bin_read_statvfs : statvfs Core.Bin_prot.Read.reader
val __bin_read_statvfs__ : (int -> statvfs) Core.Bin_prot.Read.reader
val bin_reader_statvfs : statvfs Core.Bin_prot.Type_class.reader
val bin_statvfs : statvfs Core.Bin_prot.Type_class.t
val statvfs : string -> statvfs
get file system statistics
module Extended_passwd : sig ... end
val strptime : fmt:string -> string -> Core.Unix.tm
The CIDR module moved into Core.Unix
module Inet_port : sig ... end
Simple int wrapper to be explicit about ports.
module Mac_address : sig ... end
module Quota : sig ... end
module Mount_entry : sig ... end