ocaml-opentelemetry/eio/Eio_unix/index.html
2026-04-06 19:57:49 +00:00

2 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. 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>Eio_unix (eio.Eio_unix)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">Index</a> &#x00BB; <a href="../index.html">eio</a> &#x00BB; Eio_unix</nav><header class="odoc-preamble"><h1>Module <code><span>Eio_unix</span></code></h1><p>Extension of <a href="../Eio/index.html"><code>Eio</code></a> for integration with OCaml's <code>Unix</code> module.</p><p>Note that OCaml's <code>Unix</code> module is not safe, and therefore care must be taken when using these functions. For example, it is possible to leak file descriptors this way, or to use them after they've been closed, allowing one module to corrupt a file belonging to an unrelated module.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type extension anchored" id="extension-decl-Unix_error"><a href="#extension-decl-Unix_error" class="anchor"></a><code><span><span class="keyword">type</span> <a href="../Eio/Exn/Backend/index.html#type-t">Eio.Exn.Backend.t</a> += </span></code><ol><li id="extension-Unix_error" class="def variant extension anchored"><a href="#extension-Unix_error" class="anchor"></a><code><span>| </span><span><span class="extension">Unix_error</span> <span class="keyword">of</span> <a href="../../ocaml/Unix/index.html#type-error">Unix.error</a> * string * string</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Wrapper for embedding <a href="../../ocaml/Unix/index.html#exception-Unix_error"><code>Unix.Unix_error</code></a> errors.</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Fd"><a href="#module-Fd" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Fd/index.html">Fd</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A safe wrapper for <a href="../../ocaml/Unix/index.html#type-file_descr"><code>Unix.file_descr</code></a>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Resource"><a href="#module-Resource" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Resource/index.html">Resource</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Eio resources backed by an OS file descriptor.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Net"><a href="#module-Net" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Net/index.html">Net</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Extended network API with support for file descriptors.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-source_ty"><a href="#type-source_ty" class="anchor"></a><code><span><span class="keyword">type</span> source_ty</span><span> = </span><span>[ </span></code><ol><li id="type-source_ty.Unix_fd" class="def variant constructor anchored"><a href="#type-source_ty.Unix_fd" class="anchor"></a><code><span>| </span><span>`Unix_fd</span></code></li><li id="type-source_ty.Eio.Resource.close_ty" class="def variant type anchored"><a href="#type-source_ty.Eio.Resource.close_ty" class="anchor"></a><code><span>| </span><span><a href="../Eio/Resource/index.html#type-close_ty">Eio.Resource.close_ty</a></span></code></li><li id="type-source_ty.Eio.Flow.source_ty" class="def variant type anchored"><a href="#type-source_ty.Eio.Flow.source_ty" class="anchor"></a><code><span>| </span><span><a href="../Eio/Flow/index.html#type-source_ty">Eio.Flow.source_ty</a></span></code></li></ol><code><span> ]</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-sink_ty"><a href="#type-sink_ty" class="anchor"></a><code><span><span class="keyword">type</span> sink_ty</span><span> = </span><span>[ </span></code><ol><li id="type-sink_ty.Unix_fd" class="def variant constructor anchored"><a href="#type-sink_ty.Unix_fd" class="anchor"></a><code><span>| </span><span>`Unix_fd</span></code></li><li id="type-sink_ty.Eio.Resource.close_ty" class="def variant type anchored"><a href="#type-sink_ty.Eio.Resource.close_ty" class="anchor"></a><code><span>| </span><span><a href="../Eio/Resource/index.html#type-close_ty">Eio.Resource.close_ty</a></span></code></li><li id="type-sink_ty.Eio.Flow.sink_ty" class="def variant type anchored"><a href="#type-sink_ty.Eio.Flow.sink_ty" class="anchor"></a><code><span>| </span><span><a href="../Eio/Flow/index.html#type-sink_ty">Eio.Flow.sink_ty</a></span></code></li></ol><code><span> ]</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-source"><a href="#type-source" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a source</span></span><span> = <span><span>(<span>[&gt; <a href="#type-source_ty">source_ty</a> ]</span> <span class="keyword">as</span> 'a)</span> <a href="../Eio/Std/index.html#type-r">Eio.Std.r</a></span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-sink"><a href="#type-sink" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a sink</span></span><span> = <span><span>(<span>[&gt; <a href="#type-sink_ty">sink_ty</a> ]</span> <span class="keyword">as</span> 'a)</span> <a href="../Eio/Std/index.html#type-r">Eio.Std.r</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-await_readable"><a href="#val-await_readable" class="anchor"></a><code><span><span class="keyword">val</span> await_readable : <span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>await_readable fd</code> blocks until <code>fd</code> is readable (or has an error).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-await_writable"><a href="#val-await_writable" class="anchor"></a><code><span><span class="keyword">val</span> await_writable : <span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>await_writable fd</code> blocks until <code>fd</code> is writable (or has an error).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-sleep"><a href="#val-sleep" class="anchor"></a><code><span><span class="keyword">val</span> sleep : <span>float <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>sleep d</code> sleeps for <code>d</code> seconds, allowing other fibers to run. This is can be useful for debugging (e.g. to introduce delays to trigger a race condition) without having to plumb <a href="../Eio/Stdenv/index.html#val-mono_clock"><code>Eio.Stdenv.mono_clock</code></a> through your code. It can also be used in programs that don't care about tracking determinism.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-run_in_systhread"><a href="#val-run_in_systhread" class="anchor"></a><code><span><span class="keyword">val</span> run_in_systhread : <span><span class="optlabel">?label</span>:string <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>run_in_systhread fn</code> runs the function <code>fn</code> using a pool of system threads (<code>Thread.t</code>).</p><p>This pool creates a new system thread if all threads are busy, it does not wait. <code>run_in_systhread</code> allows blocking calls to be made non-blocking.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">label</span> <p>The operation name to use in trace output.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pipe"><a href="#val-pipe" class="anchor"></a><code><span><span class="keyword">val</span> pipe : <span><a href="../Eio/Switch/index.html#type-t">Eio.Std.Switch.t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-source_ty">source_ty</a> <a href="../Eio/Std/index.html#type-r">Eio.Std.r</a></span> * <span><a href="#type-sink_ty">sink_ty</a> <a href="../Eio/Std/index.html#type-r">Eio.Std.r</a></span></span></code></div><div class="spec-doc"><p><code>pipe sw</code> returns a connected pair of flows <code>src</code> and <code>sink</code>. Data written to <code>sink</code> can be read from <code>src</code>. Note that, like all FDs created by Eio, they are both marked as close-on-exec by default.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Process"><a href="#module-Process" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Process/index.html">Process</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Spawning child processes with extra control.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Cap"><a href="#module-Cap" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Cap/index.html">Cap</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Capsicum security.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Stdenv"><a href="#module-Stdenv" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Stdenv/index.html">Stdenv</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>The set of resources provided to a process on a Unix-compatible system.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Private"><a href="#module-Private" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Private/index.html">Private</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>API for Eio backends only.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Pi"><a href="#module-Pi" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Pi/index.html">Pi</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>