emacs.d/clones/docs.racket-lang.org/reference/pipeports.html
2022-08-24 19:36:32 +02:00

23 lines
No EOL
18 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>13.1.7&nbsp;Pipes</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewselflink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_1&quot;);">&#9658;</a></td><td>13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr></table><div class="tocviewsublist" style="display: none;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">13.1&nbsp;</td><td><a href="ports.html" class="tocviewselflink" data-pltdoc="x">Ports</a></td></tr><tr><td align="right">13.2&nbsp;</td><td><a href="Byte_and_String_Input.html" class="tocviewlink" data-pltdoc="x">Byte and String Input</a></td></tr><tr><td align="right">13.3&nbsp;</td><td><a href="Byte_and_String_Output.html" class="tocviewlink" data-pltdoc="x">Byte and String Output</a></td></tr><tr><td align="right">13.4&nbsp;</td><td><a href="Reading.html" class="tocviewlink" data-pltdoc="x">Reading</a></td></tr><tr><td align="right">13.5&nbsp;</td><td><a href="Writing.html" class="tocviewlink" data-pltdoc="x">Writing</a></td></tr><tr><td align="right">13.6&nbsp;</td><td><a href="pretty-print.html" class="tocviewlink" data-pltdoc="x">Pretty Printing</a></td></tr><tr><td align="right">13.7&nbsp;</td><td><a href="Reader_Extension.html" class="tocviewlink" data-pltdoc="x">Reader Extension</a></td></tr><tr><td align="right">13.8&nbsp;</td><td><a href="Printer_Extension.html" class="tocviewlink" data-pltdoc="x">Printer Extension</a></td></tr><tr><td align="right">13.9&nbsp;</td><td><a href="serialization.html" class="tocviewlink" data-pltdoc="x">Serialization</a></td></tr><tr><td align="right">13.10&nbsp;</td><td><a href="fasl.html" class="tocviewlink" data-pltdoc="x">Fast-<wbr></wbr>Load Serialization</a></td></tr><tr><td align="right">13.11&nbsp;</td><td><a href="sha.html" class="tocviewlink" data-pltdoc="x">Cryptographic Hashing</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_2&quot;);">&#9660;</a></td><td>13.1&nbsp;</td><td><a href="ports.html" class="tocviewlink" data-pltdoc="x">Ports</a></td></tr></table><div class="tocviewsublistbottom" style="display: block;" id="tocview_2"><table cellspacing="0" cellpadding="0"><tr><td align="right">13.1.1&nbsp;</td><td><a href="encodings.html" class="tocviewlink" data-pltdoc="x">Encodings and Locales</a></td></tr><tr><td align="right">13.1.2&nbsp;</td><td><a href="port-ops.html" class="tocviewlink" data-pltdoc="x">Managing Ports</a></td></tr><tr><td align="right">13.1.3&nbsp;</td><td><a href="port-buffers.html" class="tocviewlink" data-pltdoc="x">Port Buffers and Positions</a></td></tr><tr><td align="right">13.1.4&nbsp;</td><td><a href="linecol.html" class="tocviewlink" data-pltdoc="x">Counting Positions, Lines, and Columns</a></td></tr><tr><td align="right">13.1.5&nbsp;</td><td><a href="file-ports.html" class="tocviewlink" data-pltdoc="x">File Ports</a></td></tr><tr><td align="right">13.1.6&nbsp;</td><td><a href="stringport.html" class="tocviewlink" data-pltdoc="x">String Ports</a></td></tr><tr><td align="right">13.1.7&nbsp;</td><td><a href="pipeports.html" class="tocviewselflink" data-pltdoc="x">Pipes</a></td></tr><tr><td align="right">13.1.8&nbsp;</td><td><a href="portstructs.html" class="tocviewlink" data-pltdoc="x">Structures as Ports</a></td></tr><tr><td align="right">13.1.9&nbsp;</td><td><a href="customport.html" class="tocviewlink" data-pltdoc="x">Custom Ports</a></td></tr><tr><td align="right">13.1.10&nbsp;</td><td><a href="port-lib.html" class="tocviewlink" data-pltdoc="x">More Port Constructors, Procedures, and Events</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">make-<wbr></wbr>pipe</span></span></a></td></tr><tr><td><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._pipe-content-length%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pipe-<wbr></wbr>content-<wbr></wbr>length</span></span></a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="stringport.html" title="backward to &quot;13.1.6 String Ports&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="ports.html" title="up to &quot;13.1 Ports&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="portstructs.html" title="forward to &quot;13.1.8 Structures as Ports&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;pipeports&quot;">13.1.7<tt>&nbsp;</tt><a name="(part._pipeports)"></a>Pipes</h5><p>A Racket <a name="(tech._pipe)"></a><span style="font-style: italic">pipe</span> is internal to Racket, and not related to
OS-level pipes for communicating between different
processes.<span class="refelem"><span class="refcolumn"><span class="refcontent">OS-level pipes may be created by
<span class="RktSym"><a href="subprocess.html#%28def._%28%28quote._~23~25kernel%29._subprocess%29%29" class="RktValLink" data-pltdoc="x">subprocess</a></span>, opening an existing named file on a Unix
filesystem, or starting Racket with pipes for its original input,
output, or error port. Such pipes are <a href="file-ports.html#%28tech._file._stream._port%29" class="techoutside" data-pltdoc="x"><span class="techinside">file-stream ports</span></a>,
unlike the pipes produced by <span class="RktSym"><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29" class="RktValLink" data-pltdoc="x">make-pipe</a></span>.</span></span></span></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-pipe))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-pipe</a></span></span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">limit</span><span class="hspace">&nbsp;</span><span class="RktVar">input-name</span><span class="hspace">&nbsp;</span><span class="RktVar">output-name</span><span class="RktOpt">]</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0"><tr><td><span class="RktSym"><a href="port-ops.html#%28def._%28%28quote._~23~25kernel%29._input-port~3f%29%29" class="RktValLink" data-pltdoc="x">input-port?</a></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><a href="port-ops.html#%28def._%28%28quote._~23~25kernel%29._output-port~3f%29%29" class="RktValLink" data-pltdoc="x">output-port?</a></span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">limit</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-positive-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-positive-integer?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">input-name</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pipe</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">output-name</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pipe</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns two port values: the first port is an input port and the
second is an output port. Data written to the output port is read from
the input port, with no intermediate buffering. Unlike some other
kinds of ports, pipe ports do not need to be explicitly closed to be
reclaimed by <a href="eval-model.html#%28part._gc-model%29" data-pltdoc="x">garbage collection</a>.</div></p><p>If <span class="RktVar">limit</span> is <span class="RktVal">#f</span>, the new pipe holds an unlimited
number of unread bytes (i.e., limited only by the available
memory). If <span class="RktVar">limit</span> is a positive number, then the pipe will
hold at most <span class="RktVar">limit</span> unread/unpeeked bytes; writing to the
pipe&rsquo;s output port thereafter will block until a read or peek from the
input port makes more space available. (Peeks effectively extend the
port&rsquo;s capacity until the peeked bytes are read.)</p><p>The optional <span class="RktVar">input-name</span> and <span class="RktVar">output-name</span> are used
as the names for the returned input and output ports, respectively.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._pipe-content-length))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._pipe-content-length%29%29" class="RktValDef RktValLink" data-pltdoc="x">pipe-content-length</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pipe-port</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pipe-port</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="port-ops.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._port~3f%29%29" class="RktValLink" data-pltdoc="x">port?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the number of bytes contained in a pipe, where
<span class="RktVar">pipe-port</span> is either of the pipe&rsquo;s ports produced by
<span class="RktSym"><a href="pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29" class="RktValLink" data-pltdoc="x">make-pipe</a></span>. The pipe&rsquo;s content length counts all bytes that
have been written to the pipe and not yet read (though possibly
peeked).</div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="stringport.html" title="backward to &quot;13.1.6 String Ports&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="ports.html" title="up to &quot;13.1 Ports&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="portstructs.html" title="forward to &quot;13.1.8 Structures as Ports&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>