Unix_extendedExtensions to Core_unix.
module Unix := Core_unixval fork_exec :
?stdin:Unix.File_descr.t ->
?stdout:Unix.File_descr.t ->
?stderr: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 @@ portablefork_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.
val ntohl : Core.Int32.t -> Core.Int32.t @@ portableNetwork to host order long, like C.
val htonl : Core.Int32.t -> Core.Int32.t @@ portableHost to network order long, like C.
module Extended_passwd : sig ... endval strptime :
?locale:Unix.Locale.t ->
?allow_trailing_input:bool ->
fmt:string ->
string ->
Unix.tmThe CIDR module moved into Core_unix
module Inet_port : sig ... endSimple int wrapper to be explicit about ports.
module Mac_address = Core.Nothingmodule Quota : sig ... endmodule Mount_entry : sig ... endval terminal_width : int Core.Lazy.t @@ portableval terminal_height : int Core.Lazy.t @@ portable