ocaml-containers/2.0/containers.unix/CCUnix/index.html
2018-01-21 15:48:04 -06:00

18 lines
No EOL
17 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCUnix (containers.unix.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> &mdash; <span class="package">package <a href="../index.html">containers.unix</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">&#8209;&gt;</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">&#8209;&gt;</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>&lt; stdout : string; stderr : string; status : Unix.process_status; errcode : int; &gt;</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 : ?&#8288;bufsize:int <span class="keyword">&#8209;&gt;</span> ?&#8288;stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">&#8209;&gt;</span> ?&#8288;env:string array <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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 : ?&#8288;bufsize:int <span class="keyword">&#8209;&gt;</span> ?&#8288;stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">&#8209;&gt;</span> ?&#8288;env:string array <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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 : ?&#8288;bufsize:int <span class="keyword">&#8209;&gt;</span> ?&#8288;stdin:[ `Gen of string <a href="index.html#type-gen">gen</a> | `Str of string ] <span class="keyword">&#8209;&gt;</span> ?&#8288;env:string array <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, Buffer.t, unit, string) Pervasives.format4 <span class="keyword">&#8209;&gt;</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>&lt; 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">&#8209;&gt;</span> unit; close_in : unit; close_err : unit; close_out : unit; close_all : unit; wait : Unix.process_status; wait_errcode : int; &gt;</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 : ?&#8288;env:string array <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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 &quot;cmd&quot;</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 : &lt; stdout : <span class="type-var">'a</span>; .. &gt; <span class="keyword">&#8209;&gt;</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 : &lt; stderr : <span class="type-var">'a</span>; .. &gt; <span class="keyword">&#8209;&gt;</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 : &lt; status : <span class="type-var">'a</span>; .. &gt; <span class="keyword">&#8209;&gt;</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 : &lt; errcode : <span class="type-var">'a</span>; .. &gt; <span class="keyword">&#8209;&gt;</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 : ?&#8288;mode:int <span class="keyword">&#8209;&gt;</span> ?&#8288;flags:Unix.open_flag list <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> f:(Pervasives.in_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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 : ?&#8288;mode:int <span class="keyword">&#8209;&gt;</span> ?&#8288;flags:Unix.open_flag list <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> f:(Pervasives.out_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</span> f:(Pervasives.in_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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 &quot;ls /tmp&quot; ~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">&#8209;&gt;</span> f:(Pervasives.out_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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>&lt; stdin : Pervasives.out_channel; stdout : Pervasives.in_channel; stderr : Pervasives.in_channel; close : Unix.process_status; &gt;</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 : ?&#8288;env:string array <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> f:(<a href="index.html#type-process_full">process_full</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</span> f:(Pervasives.in_channel <span class="keyword">&#8209;&gt;</span> Pervasives.out_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p>Wrap <span class="xref-unresolved" title="unresolved reference to &quot;Unix.open_connection&quot;">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">&#8209;&gt;</span> f:(Pervasives.in_channel <span class="keyword">&#8209;&gt;</span> Pervasives.out_channel <span class="keyword">&#8209;&gt;</span> <span class="type-var">_</span>) <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> (unit <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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-(?|&amp;)"><a href="#val-(?|&amp;)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(?|&amp;) : (<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">&#8209;&gt;</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>