mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
18 lines
No EOL
17 KiB
HTML
18 lines
No EOL
17 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCUnix (containers.CCUnix)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> — <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCUnix</span></h1></header><h2>High-level Functions on top of Unix</h2><p>Some useful functions built on top of Unix.</p><p><b>status: unstable</b></p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.10</li></ul><div class="spec type" id="type-or_error"><a href="#type-or_error" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a or_error</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span>, string) Result.result</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-gen"><a href="#type-gen" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a gen</code><code><span class="keyword"> = </span>unit <span class="keyword">‑></span> <span class="type-var">'a</span> option</code><code></code></div><div class="doc"></div></div><h3>Calling Commands</h3><div class="spec val" id="val-escape_str"><a href="#val-escape_str" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>escape_str : string <span class="keyword">‑></span> string</code></div><div class="doc"><p>Escape a string so it can be a shell argument.</p></div></div><div class="spec type" id="type-call_result"><a href="#type-call_result" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>call_result</code><code><span class="keyword"> = </span>< stdout : string; stderr : string; status : Unix.process_status; errcode : int; ></code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-call_full"><a href="#val-call_full" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>call_full : ?⁠bufsize:int <span class="keyword">‑></span> ?⁠stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">‑></span> ?⁠env:string array <span class="keyword">‑></span> (<span class="type-var">'a</span>, Buffer.t, unit, <a href="index.html#type-call_result">call_result</a>) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">call_full cmd</code> wraps the result of <code class="code">Unix.open_process_full cmd</code> into an
|
||
object. It reads the full stdout and stderr of the subprocess before
|
||
returning.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">stdin</span>: if provided, the generator or string is consumed and fed to
|
||
the subprocess input channel, which is then closed.</li><li><span class="at-tag parameter">Parameter</span> <span class="module-path">bufsize</span>: buffer size used to read stdout and stderr.</li><li><span class="at-tag parameter">Parameter</span> <span class="module-path">env</span>: environment to run the command in.</li></ul></div></div><div class="spec val" id="val-call"><a href="#val-call" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>call : ?⁠bufsize:int <span class="keyword">‑></span> ?⁠stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">‑></span> ?⁠env:string array <span class="keyword">‑></span> (<span class="type-var">'a</span>, Buffer.t, unit, string<span class="keyword"> * </span>string<span class="keyword"> * </span>int) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">call cmd</code> is similar to <code class="code">call_full cmd</code> but returns
|
||
a tuple <code class="code">stdout, stderr, errcode</code> instead of an object.</p></div></div><div class="spec val" id="val-call_stdout"><a href="#val-call_stdout" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>call_stdout : ?⁠bufsize:int <span class="keyword">‑></span> ?⁠stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">‑></span> ?⁠env:string array <span class="keyword">‑></span> (<span class="type-var">'a</span>, Buffer.t, unit, string) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"></div></div><div class="spec type" id="type-line"><a href="#type-line" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>line</code><code><span class="keyword"> = </span>string</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-async_call_result"><a href="#type-async_call_result" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>async_call_result</code><code><span class="keyword"> = </span>< stdout : <a href="index.html#type-line">line</a> <a href="index.html#type-gen">gen</a>; stderr : <a href="index.html#type-line">line</a> <a href="index.html#type-gen">gen</a>; stdin : <a href="index.html#type-line">line</a> <span class="keyword">‑></span> unit; close_in : unit; close_err : unit; close_out : unit; close_all : unit; wait : Unix.process_status; wait_errcode : int; ></code><code></code></div><div class="doc"><p>A subprocess for interactive usage (read/write channels line by line)</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.11</li></ul></div></div><div class="spec val" id="val-async_call"><a href="#val-async_call" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>async_call : ?⁠env:string array <span class="keyword">‑></span> (<span class="type-var">'a</span>, Buffer.t, unit, <a href="index.html#type-async_call_result">async_call_result</a>) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Spawns a subprocess, like <a href="index.html#val-call">call</a>, but the subprocess's channels are
|
||
line generators and line sinks (for stdin).
|
||
If <code class="code">p</code> is <code class="code">async_call "cmd"</code>, then <code class="code">p#wait</code> waits for the subprocess
|
||
to die. Channels can be closed independently.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.11</li></ul></div></div><h3>Accessors</h3><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.11</li></ul><div class="spec val" id="val-stdout"><a href="#val-stdout" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>stdout : < stdout : <span class="type-var">'a</span>; .. > <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"></div></div><div class="spec val" id="val-stderr"><a href="#val-stderr" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>stderr : < stderr : <span class="type-var">'a</span>; .. > <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"></div></div><div class="spec val" id="val-status"><a href="#val-status" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>status : < status : <span class="type-var">'a</span>; .. > <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"></div></div><div class="spec val" id="val-errcode"><a href="#val-errcode" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>errcode : < errcode : <span class="type-var">'a</span>; .. > <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"></div></div><h3>Simple IO</h3><div class="spec val" id="val-with_in"><a href="#val-with_in" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_in : ?⁠mode:int <span class="keyword">‑></span> ?⁠flags:Unix.open_flag list <span class="keyword">‑></span> string <span class="keyword">‑></span> f:(Pervasives.in_channel <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Open an input file with the given optional flag list, calls the function
|
||
on the input channel. When the function raises or returns, the
|
||
channel is closed.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">flags</span>: opening flags. <code class="code">Unix.O_RDONLY</code> is used in any cases.</li><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_out"><a href="#val-with_out" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_out : ?⁠mode:int <span class="keyword">‑></span> ?⁠flags:Unix.open_flag list <span class="keyword">‑></span> string <span class="keyword">‑></span> f:(Pervasives.out_channel <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Same as <a href="index.html#val-with_in">with_in</a> but for an output channel.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">flags</span>: opening flags (default <code class="code">[Unix.O_CREAT; Unix.O_TRUNC]</code>)
|
||
<code class="code">Unix.O_WRONLY</code> is used in any cases.</li><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_process_in"><a href="#val-with_process_in" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_process_in : string <span class="keyword">‑></span> f:(Pervasives.in_channel <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Open a subprocess and obtain a handle to its stdout.
|
||
</p><pre><code class="code"> CCUnix.with_process_in "ls /tmp" ~f:CCIO.read_lines_l;;</code></pre><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_process_out"><a href="#val-with_process_out" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_process_out : string <span class="keyword">‑></span> f:(Pervasives.out_channel <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Open a subprocess and obtain a handle to its stdin.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec type" id="type-process_full"><a href="#type-process_full" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>process_full</code><code><span class="keyword"> = </span>< stdin : Pervasives.out_channel; stdout : Pervasives.in_channel; stderr : Pervasives.in_channel; close : Unix.process_status; ></code><code></code></div><div class="doc"><p>Handle to a subprocess.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_process_full"><a href="#val-with_process_full" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_process_full : ?⁠env:string array <span class="keyword">‑></span> string <span class="keyword">‑></span> f:(<a href="index.html#type-process_full">process_full</a> <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Open a subprocess and obtain a handle to its channels.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">env</span>: environment to pass to the subprocess.</li><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_connection"><a href="#val-with_connection" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_connection : Unix.sockaddr <span class="keyword">‑></span> f:(Pervasives.in_channel <span class="keyword">‑></span> Pervasives.out_channel <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Wrap <span class="xref-unresolved" title="unresolved reference to "Unix.open_connection"">Unix.open_connection</span> with a handler.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec exception" id="exception-ExitServer"><a href="#exception-ExitServer" class="anchor"></a><div class="def exception"><code><span class="keyword">exception </span></code><code><span class="exception">ExitServer</span></code></div><div class="doc"></div></div><div class="spec val" id="val-establish_server"><a href="#val-establish_server" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>establish_server : Unix.sockaddr <span class="keyword">‑></span> f:(Pervasives.in_channel <span class="keyword">‑></span> Pervasives.out_channel <span class="keyword">‑></span> <span class="type-var">_</span>) <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Listen on the address and calls the handler in a blocking fashion.
|
||
Using Thread is recommended if handlers might take time.
|
||
The callback should raise <a href="index.html#exception-ExitServer">ExitServer</a> to stop the loop.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-with_file_lock"><a href="#val-with_file_lock" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_file_lock : kind:[ `Read | `Write ] <span class="keyword">‑></span> string <span class="keyword">‑></span> (unit <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">with_file_lock ~kind filename f</code> puts a lock on the offset 0
|
||
of the file named <code class="code">filename</code>, calls <code class="code">f</code> and returns its result after
|
||
the file is unlocked. If <code class="code">f ()</code> raises an exception the exception is
|
||
re-raised after the file is unlocked.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">kind</span>: specifies whether the lock is read-only or read-write.</li><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><h3>Infix Functions</h3><div class="spec module" id="module-Infix"><a href="#module-Infix" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="Infix/index.html">Infix</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><div class="spec include"><div class="doc"></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><span class="keyword">module type of </span><a href="index.html#module-Infix">Infix</a></code></span></summary><div class="spec val" id="val-(?|)"><a href="#val-(?|)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(?|) : (<span class="type-var">'a</span>, Buffer.t, unit, <a href="index.html#type-call_result">call_result</a>) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Infix version of <a href="index.html#val-call">call</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.11</li></ul></div></div><div class="spec val" id="val-(?|&)"><a href="#val-(?|&)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(?|&) : (<span class="type-var">'a</span>, Buffer.t, unit, <a href="index.html#type-async_call_result">async_call_result</a>) Pervasives.format4 <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Infix version of <a href="index.html#val-async_call">async_call</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.11</li></ul></div></div></details></div></body></html> |