autodoc.git
/
traditional_manual
/
chapter_9.html
version
»
Context lines:
10
20
40
80
file
none
3
autodoc.git/traditional_manual/chapter_9.html:1:
+
<!doctype html><html><head><title>Pike Reference Manual</title>
+
<meta charset='utf-8'></head>
+
<body><dl><dt><h1 class='header'>9. I/O</h1></dt><dd><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.File</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This is the basic I/O object, it provides socket and pipe
+
communication as well as file access. It does not buffer reads and
+
writes or provide line-by-line reading, that is done with
+
<code>Stdio.FILE</code> object.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The file or stream will normally be closed when this object is
+
destructed (unless there are more objects that refer to the same
+
file through use of <code>assign</code> or <code>dup</code>). Objects do not contain
+
cyclic references in themselves, so they will be destructed timely
+
when they run out of references.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.FILE</code></p>
+
</dd></dl>
-
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>`<<</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> res = <code class='class'>Stdio.File()</code> << <code class='class'>data</code></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> res = <code class='class'>Stdio.File()</code> << <code class='class'>data</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write some data to a file.</p>
+
<p> If <code>data</code> is not a string, it is casted to string, and then
+
written to the file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Throws an error if not all data could be written.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>write()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>assign</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>assign</span>(</b><code class='object unresolved'>File</code>|<code class='object unresolved'>Fd</code> <code class='argument'>o</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function takes a clone of Stdio.File and assigns all
+
variables of this file from it. It can be used together with <code>dup()</code>
+
to move files around.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>dup()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>async_connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>async_connect</span>(</b><code class='datatype'>string</code> <code class='argument'>host</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>function</code>(<code class='datatype'>int</code>, <code class='datatype'>mixed</code> ... :<code class='datatype'>void</code>) <code class='argument'>callback</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a TCP/IP connection asynchronously.</p>
+
<p> This function is similar to <code>connect()</code>, but works asynchronously.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-host'></span>Parameter <code class='parameter'>host</code></dt>
+
<dd></dd><dd class='body--doc'><p>Hostname or IP to connect to.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-port'></span>Parameter <code class='parameter'>port</code></dt>
+
<dd></dd><dd class='body--doc'><p>Port number or service name to connect to.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-callback'></span>Parameter <code class='parameter'>callback</code></dt>
+
<dd></dd><dd class='body--doc'><p>Function to be called on completion.
+
The first argument will be <code class='expr'>1</code> if a connection was
+
successfully established, and <code class='expr'>0</code> (zero) on failure.
+
The rest of the arguments to <code>callback</code> are passed
+
verbatim from <code>args</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-args'></span>Parameter <code class='parameter'>args</code></dt>
+
<dd></dd><dd class='body--doc'><p>Extra arguments to pass to <code>callback</code>.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> on failure, and <code class='expr'>1</code> if <code>callback</code>
+
will be used.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The socket may be opened with <code>open_socket()</code> ahead of
+
the call to this function, but it is not required.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This object is put in callback mode by this function. For
+
<code>callback</code> to be called, the backend must be active. See e.g.
+
<code>set_read_callback</code> for more details about backends and
+
callback mode.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The socket will be in nonblocking state if the connection is
+
successful, and any callbacks will be cleared.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>connect()</code>, <code>open_socket()</code>, <code>set_nonblocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><code class='datatype'>string</code> <code class='argument'>direction</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Close the file. Optionally, specify "r", "w" or "rw" to close just
+
the read, just the write or both read and write directions of the file
+
respectively.</p>
+
<p> An exception is thrown if an I/O error occurs.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Nonzero is returned if the file wasn't open in the specified
+
direction, zero otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function will not call the <tt>close_callback</tt>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open</code>, <code>open_socket</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><code class='datatype'>string</code> <code class='argument'>direction</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Close a file or stream.</p>
+
<p> If direction is not specified, both the read and the write
+
direction is closed. Otherwise only the directions specified is
+
closed.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Nonzero is returned if the file or stream wasn't open in the
+
specified direction, zero otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An exception is thrown if an I/O error occurs.</p>
+
<p> The default behaviour for sockets is typically to flush buffered
+
data in the background, but this can be changed with <code>linger()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>close()</code> has no effect if this file object has been associated
+
with an already opened file, i.e. if <code>open()</code> was given an
+
integer as the first argument.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>linger()</code>, <code>open()</code>, <code>open_socket()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code><b>)</b></code><br>
+
<code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code>, <code class='datatype'>string</code> <code class='argument'>src_addr</code>, <code class='datatype'>int</code> <code class='argument'>src_port</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a TCP/IP connection to the specified destination.</p>
+
<p> In nonblocking mode, success is indicated with the write-callback,
+
and failure with the close-callback or the read_oob-callback.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set
+
to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded
+
as a connection failure.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>host</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>client</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>client_port</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function connects a socket previously created with
+
<code>open_socket()</code> to a remote socket through TCP/IP. The
+
<code>host</code> argument is the hostname or IP number of the remote machine.
+
A local IP and port can be explicitly bound by specifying <code>client</code>
+
and <code>client_port</code>.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns 1 for success, 0 otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and
+
<code>errno()</code> set to <code class='expr'>EWOULDBLOCK</code> or
+
<code class='expr'>WSAEWOULDBLOCK</code>. This should not be regarded as a
+
connection failure. In nonblocking mode you need to wait for a
+
write or close callback before you know if the connection failed
+
or not.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_address()</code>, <code>async_connect()</code>, <code>connect_unix()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect_unix</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a UNIX domain socket connection to the specified destination.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-filename'></span>Parameter <code class='parameter'>filename</code></dt>
+
<dd></dd><dd class='body--doc'><p>Filename to create.</p>
+
<p> In nonblocking mode, success is indicated with the write-callback,
+
and failure with the close-callback or the read_oob-callback.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set
+
to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded
+
as a connection failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>path</code> had a quite restrictive length limit (~100 characters)
+
prior to Pike 7.8.334.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect_unix</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>connect_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a UNIX domain socket connection to the specified destination.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Nonblocking mode is not supported while connecting</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>mask</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>descriptorname</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>There are four basic ways to create a Stdio.File object.
+
The first is calling it without any arguments, in which case the you'd
+
have to call <code>open()</code>, <code>connect()</code> or some other method which connects
+
the File object with a stream.</p>
+
<p> The second way is calling it with a <code>filename</code> and open <code>mode</code>. This is
+
the same thing as cloning and then calling <code>open()</code>, except shorter and
+
faster.</p>
+
<p> The third way is to call it with <code>descriptorname</code> of <code class='expr'>"stdin"</code>,
+
<code class='expr'>"stdout"</code> or <code class='expr'>"stderr"</code>. This will open the specified
+
standard stream.</p>
+
<p> For the advanced users, you can use the file descriptors of the
+
systems (note: emulated by pike on some systems - like NT). This is
+
only useful for streaming purposes on unix systems. This is <b>not
+
recommended at all</b> if you don't know what you're into. Default
+
<code>mode</code> for this is <code class='expr'>"rw"</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Open mode will be filtered through the system UMASK. You
+
might need to use <code>chmod()</code> later.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code>, <code>connect()</code>, <code>Stdio.FILE</code>,</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.File</span> <span class='class'>Stdio.File</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>See <code>open()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>File</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function returns a clone of Stdio.File with all variables
+
copied from this file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>All variables, even <tt>id</tt>, are copied.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>assign()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.Fd</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Duplicate the file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>dup2()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup2</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>dup2</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>to</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Duplicate a file over another.</p>
+
<p> This function works similarly to <code>assign()</code>, but instead of making
+
the argument a reference to the same file, it creates a new file
+
with the same properties and places it in the argument.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.7 and later <code>to</code> need not be open, in which
+
case a new fd is allocated.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Note also that <code>to</code> is also assigned to the same backend (if any)
+
as this object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>assign()</code>, <code>dup()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the error code for the last command on this file.
+
Error code is normally cleared when a command is successful.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the errno for the latest failed file operation.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_dir</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>get_dir</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get directory contents relative to an open directory.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-path'></span>Parameter <code class='parameter'>path</code></dt>
+
<dd></dd><dd class='body--doc'><p>Path relative to the open directory. Defaults to the
+
directory itself.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns an array of filenames.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures, or in Pike 7.6 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>predef::get_dir()</code>, <code>statat()</code>, <code>openat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>getxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the value of a specified attribute, or 0 if it does not exist</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>grantpt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>grantpt</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>If this file has been created by calling <code>openpt()</code>, return the
+
filename of the associated pts-file. This function should only be
+
called once.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the filename of the corresponding pts.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only available on some platforms.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Fd</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'><code class='modifier'>optional</code> inherit Fd</span> : <span class='inherit'>Fd</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Fd_ref</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'><code class='modifier'>optional</code> inherit Fd_ref</span> : <span class='inherit'>Fd_ref</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_open</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_open</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns true if the file is open.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>If the file is a socket that has been closed from the remote side,
+
this function might still return true.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Most methods can't be called for a file descriptor that isn't
+
open. Notable exceptions <code>errno</code>, <code>mode</code>, and the set and query
+
functions for callbacks and backend.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>line_iterator</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>String.SplitIterator</code>|<code class='object unresolved'>LineIterator</code> <b><span class='method'>line_iterator</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>trim</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns an iterator that will loop over the lines in this file.
+
If trim is true, all <tt>'\r'</tt> characters will be removed from
+
the input.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>linger</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>linger</span>(</b><code class='datatype'>int(-1..65535)</code>|<code class='datatype'>void</code> <code class='argument'>seconds</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the socket linger behaviour on <code>close()</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-seconds'></span>Parameter <code class='parameter'>seconds</code></dt>
+
<dd></dd><dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Reset to default behaviour. This typically means that
+
<code>close()</code> will return immediately, but any buffered
+
data will still be sent if possible.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>0</code></code></td><td><p>Terminate the connection immediately on <code>close()</code>,
+
and discard any buffered data.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>(1..65535)</code></code></td><td><p>Have <code>close()</code> wait for at most <code>seconds</code> seconds
+
for any buffered data to be sent after which the
+
connection is terminated.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This operation is only valid on sockets.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function was not available in Pike 7.8.775 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>close()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>listxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>listxattr</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return an array of all extended attributes set on the file</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>lock</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Makes an exclusive file lock on this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>trylock()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>mode</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>mode</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the open mode and capabilities for the file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns an <code>`|()</code> of the following flags:</p>
+
<table class='box'><tr><td><code><code class='key'>0x1000</code></code></td><td><p><code>FILE_READ</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x2000</code></code></td><td><p><code>FILE_WRITE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x4000</code></code></td><td><p><code>FILE_APPEND</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x8000</code></code></td><td><p><code>FILE_CREATE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0100</code></code></td><td><p><code>FILE_TRUNC</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0200</code></code></td><td><p><code>FILE_EXCLUSIVE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0400</code></code></td><td><p><code>FILE_NONBLOCKING</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0040</code></code></td><td><p><code>PROP_SEND_FD</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0010</code></code></td><td><p><code>PROP_BIDIRECTIONAL</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0008</code></code></td><td><p><code>PROP_BUFFERED</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0004</code></code></td><td><p><code>PROP_SHUTDOWN</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0002</code></code></td><td><p><code>PROP_NONBLOCK</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0001</code></code></td><td><p><code>PROP_IPC</code></p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In some versions of Pike 7.7 and 7.8 the <tt>PROP_</tt> flags were
+
filtered from the result.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>notify</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>notify</span>(</b><code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>notification</code>, <code class='datatype'>function</code>(<code class='datatype'>void</code>:<code class='datatype'>void</code>) <code class='argument'>callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Receive notification when change occur within the fd.
+
To use, create a Stdio.File object of a directory like
+
Stdio.File(".") and then call notify() with the appropriate
+
parameters.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>When a program registers for some notification, only the first notification
+
will be received unless DN_MULTISHOT is specified as part of the
+
notification argument.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>At present, this function is Linux-specific and requires a kernel which
+
supports the F_NOTIFY fcntl() call.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-notification'></span>Parameter <code class='parameter'>notification</code></dt>
+
<dd></dd><dd class='body--doc'><p>What to notify the callback of. See the Stdio.DN_* constants for more
+
information about possible notifications.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-callback'></span>Parameter <code class='parameter'>callback</code></dt>
+
<dd></dd><dd class='body--doc'><p>Function which should be called when notification is received. The
+
function gets the signal used to indicate the notification as its
+
argument and shouldn't return anyting.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>mask</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file for read, write or append. The parameter <code>mode</code> should
+
contain one or more of the following letters:</p>
+
<table class='box'><tr><td><code><code class='key'>"r"</code></code></td><td><p>Open file for reading.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"w"</code></code></td><td><p>Open file for writing.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"a"</code></code></td><td><p>Open file for append (use with <code class='expr'>"w"</code>).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"t"</code></code></td><td><p>Truncate file at open (use with <code class='expr'>"w"</code>).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"c"</code></code></td><td><p>Create file if it doesn't exist (use with <code class='expr'>"w"</code>).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"x"</code></code></td><td><p>Fail if file already exists (use with <code class='expr'>"c"</code>).</p>
+
</td></tr>
+
</table><p><code>mode</code> should always contain at least one of the letters
+
<code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
<p> The parameter <code>mask</code> is protection bits to use if the file is
+
created. Default is <code class='expr'>0666</code> (read+write for all in octal
+
notation).</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns <code class='expr'>1</code> for success, <code class='expr'>0</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>close()</code>, <code>create()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file, or use an existing fd.</p>
+
<p> If <code>filename</code> is given, attempt to open the named file. If <code>fd</code>
+
is given instead, it should be the file descriptor for an already
+
opened file, which will then be used by this object.</p>
+
<p> <code>mode</code> describes how the file is opened. It's a case-insensitive
+
string consisting of one or more of the following letters:</p>
+
<dl class='group--doc'><dt>"r"</dt>
+
<dd><p>Open for reading.</p>
+
</dd>
+
<dt>"w"</dt>
+
<dd><p>Open for writing.</p>
+
</dd>
+
<dt>"a"</dt>
+
<dd><p>Append new data to the end.</p>
+
</dd>
+
<dt>"c"</dt>
+
<dd><p>Create the file if it doesn't exist already.</p>
+
</dd>
+
<dt>"t"</dt>
+
<dd><p>Truncate the file to zero length if it already contains data.
+
Use only together with <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt>"x"</dt>
+
<dd><p>Open exclusively - the open fails if the file already exists.
+
Use only together with <code class='expr'>"c"</code>. Note that it's not safe to
+
assume that this is atomic on some systems.</p>
+
</dd>
+
</dl><p><code>access</code> specifies the permissions to use if a new file is
+
created. It is a UNIX style permission bitfield:</p>
+
<dl class='group--doc'><dt>0400</dt>
+
<dd><p>User has read permission.</p>
+
</dd>
+
<dt>0200</dt>
+
<dd><p>User has write permission.</p>
+
</dd>
+
<dt>0100</dt>
+
<dd><p>User has execute permission.</p>
+
</dd>
+
<dt>0040</dt>
+
<dd><p>Group has read permission.</p>
+
</dd>
+
<dt>0020</dt>
+
<dd><p>Group has write permission.</p>
+
</dd>
+
<dt>0010</dt>
+
<dd><p>Group has execute permission.</p>
+
</dd>
+
<dt>0004</dt>
+
<dd><p>Others have read permission.</p>
+
</dd>
+
<dt>0002</dt>
+
<dd><p>Others have write permission.</p>
+
</dd>
+
<dt>0001</dt>
+
<dd><p>Others have execute permission.</p>
+
</dd>
+
</dl><p>It's system dependent on which of these bits that are actually
+
heeded. If <code>access</code> is not specified, it defaults to
+
<code class='expr'>00666</code>, but note that on UNIX systems it's masked with the
+
process umask before use.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns nonzero on success and <code class='expr'>0</code> (zero) on failure. If
+
there is a failure then <code>errno</code> returns the error code.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>close()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open_socket</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>open_socket</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>address</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>family_hint</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This makes this file into a socket ready for connections. The reason
+
for this function is so that you can set the socket to nonblocking
+
or blocking (default is blocking) before you call <code>connect()</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-port'></span>Parameter <code class='parameter'>port</code></dt>
+
<dd></dd><dd class='body--doc'><p>If you give a port number to this function, the socket will be
+
bound to this port locally before connecting anywhere. This is
+
only useful for some silly protocols like <b>FTP</b>. The port can
+
also be specified as a string, giving the name of the service
+
associated with the port. Pass -1 to not specify a port (eg to
+
bind only to an address).</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p>You may specify an address to bind to if your machine has many IP
+
numbers.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-family_hint'></span>Parameter <code class='parameter'>family_hint</code></dt>
+
<dd></dd><dd class='body--doc'><p>A protocol family for the socket can be specified. If no family is
+
specified, one which is appropriate for the address is automatically
+
selected. Thus, there is normally no need to specify it. If you
+
do not want to specify a bind address, you can provide the address
+
as a hint here instead, to allow the automatic selection to work
+
anyway.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns 1 for success, 0 otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>connect()</code>, <code>set_nonblocking()</code>, <code>set_blocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open_socket</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>open_socket</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>addr</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>family_hint</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='object unresolved'>File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>mask</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file relative to an open directory.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>File.statat()</code>, <code>File.unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file relative to an opened directory.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns a new file object on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures, or in Pike 7.6 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code>, <code>statat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openpt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>openpt</span>(</b><code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open the master end of a pseudo-terminal pair. The parameter
+
<code>mode</code> should contain one or more of the following letters:</p>
+
<table class='box'><tr><td><code><code class='key'>"r"</code></code></td><td><p>Open terminal for reading.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"w"</code></code></td><td><p>Open terminal for writing.</p>
+
</td></tr>
+
</table><p><code>mode</code> should always contain at least one of the letters
+
<code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>grantpt()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openpt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>openpt</span>(</b><code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open the master end of a pseudo-terminal pair.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns <code class='expr'>1</code> for success, <code class='expr'>0</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>grantpt()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>peek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code><b>)</b></code><br>
+
<code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code>, <code class='datatype'>int</code> <code class='argument'>not_eof</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if there is data available to read,
+
or wait some time for available data to read.</p>
+
<p> More specifically, a later call to <code>read()</code> will return
+
immediately, either due to data being present, or due to
+
some error (eg if a socket has been closed).</p>
+
</dd>
+
<dt class='head--doc'><span id='p-timeout'></span>Parameter <code class='parameter'>timeout</code></dt>
+
<dd></dd><dd class='body--doc'><p>Timeout in seconds.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-not_eof'></span>Parameter <code class='parameter'>not_eof</code></dt>
+
<dd></dd><dd class='body--doc'><p>Flag for specifying handling of end of file.
+
The following values are currently defined:</p>
+
<table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Traditional (and default) behaviour. Return <code class='expr'>1</code>
+
at EOF.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>1</code></code></td><td><p>Regard EOF as an error. Return <code class='expr'>-1</code> and set <code>errno()</code>
+
to return <code class='expr'>EPIPE</code> at EOF.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><table class='box'><tr><td><code><code class='key'>1</code></code></td><td><p>There is data available to <code>read()</code>, or <code>not_eof</code> is
+
<code class='expr'>0</code> (zero) and we're at EOF. A later call to
+
<code>read()</code> will not block.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>0</code></code></td><td><p>There is no data available (ie timeout).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>-1</code></code></td><td><p>Error condition. The error code returned by <code>errno()</code>
+
has been updated.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>errno()</code>, <code>read()</code></p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The function may be interrupted prematurely
+
of the timeout (due to signals);
+
check the timing manually if this is imporant.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The <code>not_eof</code> parameter was added in Pike 7.7.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function was not available on NT in Pike 7.6 and earlier.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>pipe</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>pipe</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>File</code> <b><span class='method'>pipe</span>(</b><code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>required_properties</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function creates a pipe between the object it was called in
+
and an object that is returned.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-required_properties'></span>Parameter <code class='parameter'>required_properties</code></dt>
+
<dd></dd><dd class='body--doc'><p>Binary or (<code>predef::`|()</code>) of required <code class='expr'>PROP_</code> properties.</p>
+
<table class='box'><tr><td><code><code class='key'>PROP_IPC</code></code></td><td><p>The resulting pipe may be used for inter process communication.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_NONBLOCK</code></code></td><td><p>The resulting pipe supports nonblocking I/O.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_SHUTDOWN</code></code></td><td><p>The resulting pipe supports shutting down transmission in either
+
direction (see <code>close()</code>).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_BUFFERED</code></code></td><td><p>The resulting pipe is buffered (usually 4KB).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_BIDIRECTIONAL</code></code></td><td><p>The resulting pipe is bi-directional.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_SEND_FD</code></code></td><td><p>The resulting pipe might support sending of file descriptors
+
(see <code>send_fd()</code> and <code>receive_fd()</code> for details).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>PROP_REVERSE</code></code></td><td><p>The resulting pipe supports communication "backwards" (but
+
not necessarily "forwards", see <code>PROP_BIDIRECTIONAL</code>).</p>
+
</td></tr>
+
</table><p>The default is <code class='expr'>PROP_NONBLOCK|PROP_BIDIRECTIONAL</code>.</p>
+
<p> If <code>PROP_BIDIRECTIONAL</code> isn't specified, the read-end is this
+
object, and the write-end is the returned object (unless
+
<code>PROP_REVERSE</code> has been specified, in which case it is the other
+
way around).</p>
+
<p> The two ends of a bi-directional pipe are indistinguishable.</p>
+
<p> If the File object this function is called in was open to begin with,
+
it will be closed before the pipe is created.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Calling this function with an argument of <tt>0</tt> is not the
+
same as calling it with no arguments.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Process.create_process()</code>, <code>send_fd()</code>, <code>receive_fd()</code>,
+
<code>PROP_IPC</code>, <code>PROP_NONBLOCK</code>, <code>PROP_SEND_FD</code>,
+
<code>PROP_SHUTDOWN</code>, <code>PROP_BUFFERED</code>, <code>PROP_REVERSE</code>,
+
<code>PROP_BIDIRECTIONAL</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>proxy</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>proxy</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>from</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Starts a thread that asynchronously copies data from <code>from</code>
+
to this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.sendfile()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><code class='datatype'>bool</code> <code class='argument'>local</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get address and port of a socket end-point.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-local'></span>Parameter <code class='parameter'>local</code></dt>
+
<dd></dd><dd class='body--doc'><p>If the argument <code>local</code> is not specified, or is <code class='expr'>0</code>
+
(zero), the remote end-point is returned. Otherwise, if <code>local</code>
+
is <code class='expr'>1</code>, the local end-point is returned.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns the address and port of a socket end-point
+
on the form <code class='expr'>"x.x.x.x port"</code> (IPv4) or
+
<code class='expr'>"x:x:x:x:x:x:x:x port"</code> (IPv6). IPv6 addresses
+
may use the contracted syntax.</p>
+
<p> If this file is not a socket, is not connected, or some other
+
error occurs, <code class='expr'>0</code> (zero) is returned and <code>errno()</code> will
+
return the error code.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An error is thrown if the socket (or file) isn't open.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>connect()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the callbacks.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_read_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_write_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_read_oob_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_write_oob_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_close_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_callbacks</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <b><span class='method'>query_read_callback</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <b><span class='method'>query_write_callback</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <b><span class='method'>query_read_oob_callback</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <b><span class='method'>query_write_oob_callback</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <b><span class='method'>query_close_callback</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>array</code>(<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code>:<code class='datatype'>int</code>)) <b><span class='method'>query_callbacks</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>These functions return the currently installed callbacks for the
+
respective events.</p>
+
<p> <code>query_callbacks</code> returns the callbacks in the same order as
+
<code>set_callbacks</code> and <code>set_nonblocking</code> expect them.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_nonblocking()</code>, <code>set_read_callback</code>,
+
<code>set_write_callback</code>, <code>set_read_oob_callback</code>,
+
<code>set_write_oob_callback</code>, <code>set_close_callback</code>,
+
<code>set_callbacks</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the file descriptor number associated with this object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>query_id</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function returns the <tt>id</tt> that has been set with <code>set_id()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_id()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read data from a file or a stream.</p>
+
<p> Attempts to read <code>len</code> bytes from the file, and return it as a
+
string. Less than <code>len</code> bytes can be returned if:</p>
+
<ul>
+
<li><p>end-of-file is encountered for a normal file, or</p>
+
</li><li><p>it's a stream that has been closed from the other end, or</p>
+
</li><li><p>it's a stream in nonblocking mode, or</p>
+
</li><li><p>it's a stream and <code>not_all</code> is set, or</p>
+
</li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p>
+
</li></ul><p>If <code>not_all</code> is nonzero, <code>read()</code> does not try its best to read
+
as many bytes as you have asked for, but merely returns as much as
+
the system read function returns. This is mainly useful with
+
stream devices which can return exactly one row or packet at a
+
time. If <code>not_all</code> is used in blocking mode, <code>read()</code> only
+
blocks if there's no data at all available.</p>
+
<p> If something goes wrong and <code>not_all</code> is set, zero is returned.
+
If something goes wrong and <code>not_all</code> is zero or left out, then
+
either zero or a string shorter than <code>len</code> is returned. If the
+
problem persists then a later call to <code>read()</code> fails and returns
+
zero, however.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero. That includes an end due to end-of-file or remote
+
close.</p>
+
<p> If no arguments are given, <code>read()</code> reads to the end of the file
+
or stream.</p>
+
<p> If any file descriptors have been sent by the other side of the
+
stream, <code>receive_fd()</code> will be called once for every sent file
+
descriptor.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading
+
when nonblocking mode is used.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code>
+
will return the empty string since it's not considered an error.
+
The empty string is never returned in other cases, unless nonblocking
+
mode is used or <code>len</code> is zero.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code>, <code>receive_fd()</code>, <code>send_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_function</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype'>string</code>) <b><span class='method'>read_function</span>(</b><code class='datatype'>int</code> <code class='argument'>nbytes</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns a function that when called will call <code>read</code> with
+
nbytes as argument. Can be used to get various callback
+
functions, eg for the fourth argument to
+
<code>String.SplitIterator</code>.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_oob</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Attempts to read <code>len</code> bytes of out-of-band data from the stream,
+
and returns it as a string. Less than <code>len</code> bytes can be returned
+
if:</p>
+
<ul>
+
<li><p>the stream has been closed from the other end, or</p>
+
</li><li><p>nonblocking mode is used, or</p>
+
</li><li><p><code>not_all</code> is set, or</p>
+
</li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p>
+
</li></ul><p>If <code>not_all</code> is nonzero, <code>read_oob()</code> only returns as many bytes
+
of out-of-band data as are currently available.</p>
+
<p> If something goes wrong and <code>not_all</code> is set, zero is returned.
+
If something goes wrong and <code>not_all</code> is zero or left out, then
+
either zero or a string shorter than <code>len</code> is returned. If the
+
problem persists then a later call to <code>read_oob()</code> fails and
+
returns zero, however.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero. That includes an end due to remote close.</p>
+
<p> If no arguments are given, <code>read_oob()</code> reads to the end of the
+
stream.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Out-of-band data was not supported in Pike 0.5 and earlier, and
+
not in Pike 0.6 through 7.4 if they were compiled with the
+
option <tt>'--without-oob'</tt>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the
+
other end is received. Most streams only allow for a single byte
+
of out-of-band data at a time.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading
+
when nonblocking mode is used.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code>
+
returns the empty string since it's not considered an error. The
+
empty string is never returned in other cases, unless nonblocking
+
mode is used or <code>len</code> is zero.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>receive_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>receive_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remote file descriptor reception handler.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-fd'></span>Parameter <code class='parameter'>fd</code></dt>
+
<dd></dd><dd class='body--doc'><p>File descriptor received from the remote end of a <code>pipe()</code>.
+
This object has been created by <code>fd_factory()</code>.</p>
+
<p> This function is called from <code>read()</code> when a remote file
+
descriptor has been received over a <code>PROP_SEND_FD</code>
+
capable <code>pipe()</code>.</p>
+
<p> The default implementation is just a prototype.</p>
+
<p> Overload this function to enable reception of
+
remote file descriptors.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The capability of sending and receiving remote file
+
descriptors is only available on some operating systems.
+
This capability is indicated by the precence of <code>__HAVE_SEND_FD__</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>send_fd()</code>, <code>read()</code>, <code>fd_factory()</code>, <code>__HAVE_SEND_FD__</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>release_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>release_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the file descriptor number associated with this object, in
+
addition to releasing it so that this object behaves as if closed.
+
Other settings like callbacks and backend remain intact.
+
<code>take_fd</code> can later be used to reinstate the file descriptor so
+
that the state is restored.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_fd()</code>, <code>take_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>removexattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>removexattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remove the specified extended attribute.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>seek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>pos</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code>, <code class='datatype'>int</code> <code class='argument'>add</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Seek to a specified offset in a file.</p>
+
<p> If <code>mult</code> or <code>add</code> are specified, <code>pos</code> is calculated as
+
<code class='expr'><code>pos</code> = <code>unit</code>*<code>mult</code> + <code>add</code></code>.</p>
+
<p> If <code>pos</code> is negative then it is relative to the end of the file,
+
otherwise it's an absolute offset from the start of the file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the new offset, or <code class='expr'>-1</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The arguments <code>mult</code> and <code>add</code> are considered obsolete, and
+
should not be used.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>tell()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>send_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>send_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Queues an open file descriptor for sending to the other end of a stream.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The actual sending is performed at the next successful call
+
to <code>write()</code>, this is due to limitations in the system calls.
+
This means that it isn't possible to send a file descriptor
+
without also sending some in-band data.</p>
+
<p> This operation is only supported on <code>pipe()</code>'s created with
+
<code>PROP_SEND_FD</code>.</p>
+
<p> This function is not available on all operating systems, check
+
for <code>__HAVE_SEND_FD__</code>.</p>
+
<p> The queue is emptied on successful <code>write()</code> and when the
+
write direction is <code>close()</code>'d.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>receive_fd()</code>, <code>write()</code>, <code>pipe()</code>, <code>read()</code>, <code>__HAVE_SEND_FD__</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>send_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>send_fd</span>(</b><code class='object unresolved'>File</code>|<code class='object unresolved'>Fd</code> <code class='argument'>file</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the callbacks.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object only when it is in
+
callback mode. So if this object hasn't got any active callbacks
+
and it runs out of other references, it will still be destructed
+
quickly (after closing, if necessary).</p>
+
<p> Also, this object does not keep a reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code>, <code>set_nonblocking</code>, <code>set_read_callback</code>, <code>set_write_callback</code>, <code>set_fs_event_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function clears all callbacks and sets a stream to blocking
+
mode. i.e. reading, writing and closing will wait until data has
+
been transferred before returning.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The callbacks are cleared and blocking mode is set in one atomic
+
operation, so no callback gets called in between if the backend
+
is running in another thread.</p>
+
<p> Even so, if the stream is in callback mode (i.e. if any
+
callbacks are installed) then only the backend thread can use
+
this function reliably; it might otherwise already be running in
+
a callback which is about to call e.g. <code>write</code> when the stream
+
becomes blocking.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_nonblocking()</code>, <code>set_nonblocking_keep_callbacks()</code>,
+
<code>set_blocking_keep_callbacks()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this file to blocking operation.</p>
+
<p> This is the inverse operation of <code>set_nonblocking()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_nonblocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking_keep_callbacks</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking_keep_callbacks</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking_keep_callbacks</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_blocking_keep_callbacks</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Toggle between blocking and nonblocking,
+
without changing the callbacks.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_nonblocking()</code>, <code>set_blocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_buffer</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set internal socket buffer.</p>
+
<p> This function sets the internal buffer size of a socket or stream.</p>
+
<p> The second argument allows you to set the read or write buffer by
+
specifying <code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that this function actually does anything,
+
but it certainly helps to increase data transfer speed when it does.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_callbacks</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_callbacks</span>(</b><code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Installs all the specified callbacks at once. Use <code>UNDEFINED</code>
+
to keep the current setting for a callback.</p>
+
<p> Like <code>set_nonblocking</code>, the callbacks are installed atomically.
+
As opposed to <code>set_nonblocking</code>, this function does not do
+
anything with the stream, and it doesn't even have to be open.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_read_callback</code>, <code>set_write_callback</code>,
+
<code>set_read_oob_callback</code>, <code>set_write_oob_callback</code>,
+
<code>set_close_callback</code>, <code>query_callbacks</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_read_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_write_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_read_oob_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_write_oob_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_close_callback</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_fs_event_callback</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_read_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_write_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_read_oob_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_cb</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_write_oob_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_cb</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_close_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_cb</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_fs_event_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>int</code>:<code class='datatype'>int</code>) <code class='argument'>fs_event_cb</code>, <code class='datatype'>int</code> <code class='argument'>event_mask</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>These functions set the various callbacks, which will be called
+
when various events occur on the stream. A zero as argument will
+
remove the callback.</p>
+
<p> A <code>Pike.Backend</code> object is responsible for calling the
+
callbacks. It requires a thread to be waiting in it to execute
+
the calls. That means that only one of the callbacks will be
+
running at a time, so you don't need mutexes between them.</p>
+
<p> Unless you've specified otherwise with the <code>set_backend</code>
+
function, the default backend <code>Pike.DefaultBackend</code> will be
+
used. It's normally activated by returning <code class='expr'>-1</code> from the
+
<tt>main</tt> function and will then execute in the main thread.</p>
+
<ul>
+
<li><p>When data arrives on the stream, <code>read_cb</code> will be called with
+
some or all of that data as the second argument.</p>
+
</li><li><p>When the stream has buffer space over for writing, <code>write_cb</code>
+
will be called so that you can write more data to it.</p>
+
<p> This callback is also called after the remote end of a socket
+
connection has closed the write direction. An attempt to write
+
data to it in that case will generate a <code>System.EPIPE</code> errno.
+
If the remote end has closed both directions simultaneously
+
(the usual case), Pike will first attempt to call <code>close_cb</code>,
+
then this callback (unless <code>close_cb</code> has closed the stream).</p>
+
</li><li><p>When out-of-band data arrives on the stream, <code>read_oob_cb</code>
+
will be called with some or all of that data as the second
+
argument.</p>
+
</li><li><p>When the stream allows out-of-band data to be sent,
+
<code>write_oob_cb</code> will be called so that you can write more
+
out-of-band data to it.</p>
+
<p> If the OS doesn't separate the write events for normal and
+
out-of-band data, Pike will try to call <code>write_oob_cb</code> first.
+
If it doesn't write anything, then <code>write_cb</code> will be tried.
+
This also means that <code>write_oob_cb</code> might get called when the
+
remote end of a connection has closed the write direction.</p>
+
</li><li><p>When an error or an end-of-stream in the read direction
+
occurs, <code>close_cb</code> will be called. <code>errno</code> will return the
+
error, or zero in the case of an end-of-stream.</p>
+
<p> The name of this callback is rather unfortunate since it
+
really has nothing to do with a close: The stream is still
+
open when <code>close_cb</code> is called (you might not be able to read
+
and/or write to it, but you can still use things like
+
<code>query_address</code>, and the underlying file descriptor is still
+
allocated). Also, this callback will not be called for a local
+
close, neither by a call to <code>close</code> or by destructing this
+
object.</p>
+
<p> Also, <code>close_cb</code> will not be called if a remote close only
+
occurs in the write direction; that is handled by <code>write_cb</code>
+
(or possibly <code>write_oob_cb</code>).</p>
+
<p> Events to <code>read_cb</code> and <code>close_cb</code> will be automatically
+
deregistered if an end-of-stream occurs, and all events in the
+
case of an error. I.e. there won't be any more calls to the
+
callbacks unless they are reinstalled. This doesn't affect the
+
callback settings - <code>query_read_callback</code> et al will still
+
return the installed callbacks.</p>
+
</li></ul><p>If the stream is a socket performing a nonblocking connect (see
+
<code>open_socket</code> and <code>connect</code>), a connection failure will call
+
<code>close_cb</code>, and a successful connect will call either
+
<code>read_cb</code> or <code>write_cb</code> as above.</p>
+
<p> All callbacks will receive the <tt>id</tt> set by <code>set_id</code> as
+
first argument.</p>
+
<p> If a callback returns <code class='expr'>-1</code>, no other callback or call out
+
will be called by the backend in that round. I.e. the caller of
+
the backend will get control back right away. For the default
+
backend that means it will immediately start another round and
+
check files and call outs anew.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-event_mask'></span>Parameter <code class='parameter'>event_mask</code></dt>
+
<dd></dd><dd class='body--doc'><p>An event mask specifing bitwise OR of one or more event types to
+
monitor, selected from <code>Stdio.NOTE_WRITE</code> and friends.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>These functions do not set the file nonblocking.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Callbacks are also set by <code>set_callbacks</code> and
+
<code>set_nonblocking()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>After a callback has been called, it's disabled until it has
+
accessed the stream accordingly, i.e. the <code>write_cb</code> callback
+
is disabled after it's been called until something has been
+
written with <code>write</code>, and the <code>write_oob_cb</code> callback is
+
likewise disabled until something has been written with
+
<code>write_oob</code>. Since the data already has been read when the read
+
callbacks are called, this effect is not noticeable for them.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Installing callbacks means that you will start doing I/O on the
+
stream from the thread running the backend. If you are running
+
these set functions from another thread you must be prepared
+
that the callbacks can be called immediately by the backend
+
thread, so it might not be safe to continue using the stream in
+
this thread.</p>
+
<p> Because of that, it's useful to talk about "callback mode" when
+
any callback is installed. In callback mode the stream should be
+
seen as "bound" to the backend thread. For instance, it's only
+
the backend thread that reliably can end callback mode before
+
the stream is "handed over" to another thread.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Callback mode has nothing to do with nonblocking mode - although
+
the two often are used together they don't have to be.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The file object will stay referenced from the backend object as
+
long as there are callbacks that can receive events.</p>
+
</dd>
+
<dt class='head--doc'>Bugs</dt>
+
<dd class='body--doc'><p>Setting a close callback without a read callback currently only
+
works when there's no risk of getting more data on the stream.
+
Otherwise the close callback will be silently deregistered if
+
data arrives.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>fs_event callbacks only trigger on systems that support these events.
+
Currently, this includes systems that use kqueue, such as Mac OS X,
+
and various flavours of BSD.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_callbacks</code>, <code>set_nonblocking()</code>, <code>set_id()</code>,
+
<code>set_backend</code>, <code>query_read_callback</code>, <code>query_write_callback</code>,
+
<code>query_read_oob_callback</code>, <code>query_write_oob_callback</code>,
+
<code>query_close_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_close_on_exec</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_close_on_exec</span>(</b><code class='datatype'>bool</code> <code class='argument'>yes_no</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Marks the file as to be closed in spawned processes.</p>
+
<p> This function determines whether this file will be closed when
+
calling exec().</p>
+
<p> Default is that the file WILL be closed on exec except for
+
stdin, stdout and stderr.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Process.create_process()</code>, <code>exec()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_id</span>(</b><code class='datatype'>mixed</code> <code class='argument'>id</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function sets the <tt>id</tt> of this file. The <tt>id</tt> is mainly
+
used as an identifier that is sent as the first argument to all
+
callbacks. The default <tt>id</tt> is <code class='expr'>0</code> (zero). Another possible
+
use of the <tt>id</tt> is to hold all data related to this file in a
+
mapping or array.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_id()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_keepalive</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>set_keepalive</span>(</b><code class='datatype'>bool</code> <code class='argument'>on_off</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this file to nonblocking operation.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Nonblocking operation is not supported on all Stdio.File objects.
+
Notably it is not guaranteed to be supported on objects returned
+
by <code>pipe()</code> unless <code>PROP_NONBLOCK</code> was specified in the call
+
to <code>pipe()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_blocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_callback</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function sets a stream to nonblocking mode and installs the
+
specified callbacks. See the <code class='expr'>set_*_callback</code> functions
+
for details about them. If no arguments are given, the callbacks
+
will be cleared.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>As opposed to calling the set callback functions separately,
+
this function will set all the callbacks and nonblocking mode
+
atomically so that no callback gets called in between. That
+
avoids races in case the backend is executed by another thread.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Out-of-band data was not be supported on Pike 0.5 and earlier,
+
and not on Pike 0.6 through 7.4 if they were compiled with the
+
option <tt>'--without-oob'</tt>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_blocking()</code>, <code>set_callbacks</code>, <code>set_read_callback()</code>,
+
<code>set_write_callback()</code>, <code>set_read_oob_callback()</code>,
+
<code>set_write_oob_callback()</code>, <code>set_close_callback()</code>
+
<code>set_nonblocking_keep_callbacks()</code>,
+
<code>set_blocking_keep_callbacks()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>setxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>setxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code>, <code class='datatype'>string</code> <code class='argument'>value</code>, <code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the attribute <code>attr</code> to the value <code>value</code>.</p>
+
<p> The flags parameter can be used to refine the semantics of the operation. </p>
+
<p> <code>Stdio.XATTR_CREATE</code> specifies a pure create, which
+
fails if the named attribute exists already. </p>
+
<p> <code>Stdio.XATTR_REPLACE</code> specifies a pure replace operation, which
+
fails if the named attribute does not already exist.</p>
+
<p> By default (no flags), the extended attribute will be created if need be,
+
or will simply replace the value if the attribute exists.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 if successful, 0 otherwise, setting errno.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>stat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>stat</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get status for an open file.</p>
+
<p> This function returns the same information as the function
+
<code>file_stat()</code>, but for the file it is called in. If file is not
+
an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned
+
if file is a pipe or socket.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Prior to Pike 7.1 this function returned an array(int).</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>file_stat()</code>, <code>statat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>statat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>statat</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>symlink</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get status for a file relative an open directory.</p>
+
<p> This function returns the same information as the function
+
<code>file_stat()</code>, but relative to the file it is called in. If file is not
+
an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned
+
if file is a pipe or socket.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures, or in Pike 7.6 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>file_stat()</code>, <code>stat()</code>, <code>openat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>sync</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>sync</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Flush buffers to disk.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) and sets errno on failure.</p>
+
<p> Returns <code class='expr'>1</code> on success.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>take_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>take_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Rehooks the given file descriptor number to be associated with
+
this object. As opposed to using <code>open</code> with a file descriptor
+
number, it will be closed by this object upon destruct or when
+
<code>close</code> is called.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>release_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tcgetattr</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tcsetattr</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code> <b><span class='method'>tcgetattr</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>tcsetattr</span>(</b><code class='datatype'>mapping</code> <code class='argument'>attr</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>tcsetattr</span>(</b><code class='datatype'>mapping</code> <code class='argument'>attr</code>, <code class='datatype'>string</code> <code class='argument'>when</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Gets/sets term attributes. The returned value/the <code>attr</code> parameter
+
is a mapping on the form</p>
+
<table class='box'><tr><td><code><code class='key'>"ispeed"</code> : <code class='datatype'>int(-1..)</code></code></td><td><p>In baud rate.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"ospeed"</code> : <code class='datatype'>int(-1..)</code></code></td><td><p>Out baud rate.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"csize"</code> : <code class='datatype'>int(-1..-1)</code>|<code class='datatype'>int(5..8)</code></code></td><td><p>Character size in bits.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"rows"</code> : <code class='datatype'>int</code></code></td><td><p>Terminal rows.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"columns"</code> : <code class='datatype'>int</code></code></td><td><p>Terminal columns.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>flag_name</code> : <code class='datatype'>bool</code></code></td><td><p>The value of a named flag. The flag name is
+
the string describing the termios flags (IGNBRK, BRKINT,
+
IGNPAR, PARMRK, INPCK, ISTRIP, INLCR, IGNCR, ICRNL, IUCLC,
+
IXON, IXANY, IXOFF, IMAXBEL, OPOST, OLCUC, ONLCR, OCRNL,
+
ONOCR, ONLRET, OFILL, OFDEL, OXTABS, ONOEOT, CSTOPB, CREAD,
+
PARENB, PARODD, HUPCL, CLOCAL, CRTSCTS, ISIG, ICANON, XCASE,
+
ECHO, ECHOE, ECHOK, ECHONL, ECHOCTL, ECHOPRT, ECHOKE, FLUSHO,
+
NOFLSH, TOSTOP, PENDIN). See the manpage for termios or
+
other documentation for more information. All flags are not
+
available on all platforms.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>character_name</code> : <code class='datatype'>int(8bit)</code></code></td><td><p>Sets the value of a control character (VINTR, VQUIT, VERASE,
+
VKILL, VEOF, VTIME, VMIN, VSWTC, VSTART, VSTOP, VSUSP, VEOL,
+
VREPRINT, VDISCARD, VWERASE, VLNEXT, VEOL2). All control
+
characters are not available on all platforms.</p>
+
</td></tr>
+
</table><p>Negative values are not allowed as indata, but might appear in the
+
result from <code>tcgetattr</code> when the actual value is unknown. <code>tcsetattr</code>
+
returns 0 if failed.</p>
+
<p> The argument <code>when</code> to <code>tcsetattr</code> describes when the
+
changes are to take effect:</p>
+
<table class='box'><tr><td><code><code class='key'>"TCSANOW"</code></code></td><td><p>The change occurs immediately (default).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"TCSADRAIN"</code></code></td><td><p>The change occurs after all output has been written.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"TCSAFLUSH"</code></code></td><td><p>The change occurs after all output has been written,
+
and empties input buffers.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Example</dt>
+
<dd class='example'><pre><p>// setting the terminal in raw mode:
+
Stdio.stdin->tcsetattr((["ECHO":0,"ICANON":0,"VMIN":0,"VTIME":0]));</p>
+
</pre></dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Unknown flags are ignored by <code>tcsetattr()</code>. <code>tcsetattr</code> always
+
changes the attribute, so only include attributes that actually
+
should be altered in the attribute mapping.</p>
+
</dd>
+
<dt class='head--doc'>Bugs</dt>
+
<dd class='body--doc'><p>Terminal rows and columns setting by <code>tcsetattr()</code> is not
+
currently supported.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tell</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>tell</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the current offset in the file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>seek()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>truncate</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>truncate</span>(</b><code class='datatype'>int</code> <code class='argument'>length</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Truncate a file.</p>
+
<p> Truncates the file to the specified length <code>length</code>.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>trylock</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Attempts to place a file lock on this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>lock()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unlinkat</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>unlinkat</span>(</b><code class='datatype'>string</code> <code class='argument'>f</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remove a file or directory relative to an open file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) on failure, <code class='expr'>1</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>rm()</code>, <code>openat()</code>, <code>statat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write data to a file or a stream.</p>
+
<p> Writes <code>data</code> and returns the number of bytes that were
+
actually written. It can be less than the size of the given data if</p>
+
<ul>
+
<li><p>some data was written successfully and then something went
+
wrong, or</p>
+
</li><li><p>nonblocking mode is used and not all data could be written
+
without blocking.</p>
+
</li></ul><p>-1 is returned if something went wrong and no bytes were written.
+
If only some data was written due to an error and that error
+
persists, then a later call to <code>write()</code> fails and returns -1.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero.</p>
+
<p> If <code>data</code> is an array of strings, they are written in sequence.</p>
+
<p> If more than one argument is given, <code>sprintf()</code> is used to format
+
them using <code>format</code>. If <code>format</code> is an array, the strings in it
+
are concatenated and the result is used as format string.</p>
+
<p> If there are any file descriptors that have been queued for sending
+
(with <code>send_fd()</code>), they will be sent.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Writing of wide strings is not supported. You have to encode the
+
data somehow, e.g. with <code>string_to_utf8</code> or with one of the
+
charsets supported by <code>Charset.encoder</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code>, <code>send_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write_oob</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write out-of-band data to a stream.</p>
+
<p> Writes out-of-band data to a stream and returns how many bytes
+
that were actually written. It can be less than the size of the
+
given data if some data was written successfully and then
+
something went wrong.</p>
+
<p> -1 is returned if something went wrong and no bytes were written.
+
If only some data was written due to an error and that error
+
persists, then a later call to <code>write_oob()</code> fails and returns
+
-1.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero.</p>
+
<p> If more than one argument is given, <code>sprintf()</code> is used to format
+
them.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Out-of-band data was not supported in Pike 0.5 and earlier, and
+
not in Pike 0.6 through 7.4 if they were compiled with the
+
option <tt>'--without-oob'</tt>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the
+
other end is received. Most streams only allow for a single byte
+
of out-of-band data at a time. Some streams sends the rest of
+
the data as ordinary data.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.FILE</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p><code>Stdio.FILE</code> is a buffered version of <code>Stdio.File</code>, it inherits
+
<code>Stdio.File</code> and has most of the functionality of <code>Stdio.File</code>.
+
However, it has an input buffer that allows line-by-line input.</p>
+
<p> It also has support for automatic charset conversion for both input
+
and output (see <code>Stdio.FILE()->set_charset()</code>).</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The output part of <code>Stdio.FILE</code> is currently not buffered.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>_get_iterator</b></span>
+
</dt>
+
<dd><p><code><span class='class'>Stdio.FILE</span> <span class='method'>a</span>;<br>
+
foreach( a; index; value ) or<br></code><code><code class='modifier'>protected</code> <code class='datatype'>object</code> <b><span class='method'>_get_iterator</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns an iterator that will loop over the lines in this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>line_iterator()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getchar</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>local</code> <code class='datatype'>int</code> <b><span class='method'>getchar</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function returns one character from the input stream.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the ISO-10646 (Unicode) value of the character.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Returns an <code class='expr'>int</code> and not a <code class='expr'>string</code> of length 1.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>gets</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>gets</span>(</b><code class='datatype'>bool</code>|<code class='datatype'>void</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read one line of input with support for input conversion.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-not_all'></span>Parameter <code class='parameter'>not_all</code></dt>
+
<dd></dd><dd class='body--doc'><p>Set this parameter to ignore partial lines at EOF. This
+
is useful for eg monitoring a growing logfile.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns the line read if successful, and <code class='expr'>0</code> if
+
no more lines are available.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>ngets()</code>, <code>read()</code>, <code>line_iterator()</code>, <code>set_charset()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>file</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit File</span> : <span class='inherit'>file</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>line_iterator</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>object</code> <b><span class='method'>line_iterator</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>trim</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns an iterator that will loop over the lines in this file.
+
If <code>trim</code> is true, all <tt>'\r'</tt> characters will be removed
+
from the input.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It's not supported to call this method more than once
+
unless a call to <code>seek</code> is done in advance. Also note that it's
+
not possible to intermingle calls to <code>read</code>, <code>gets</code> or other
+
functions that read data with the line iterator, it will produce
+
unexpected results since the internal buffer in the iterator will not
+
contain sequential file-data in those cases.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>_get_iterator()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>ngets</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>ngets</span>(</b><code class='datatype'>void</code>|<code class='datatype'>int(1..)</code> <code class='argument'>n</code>, <code class='datatype'>bool</code>|<code class='datatype'>void</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get <code>n</code> lines.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-n'></span>Parameter <code class='parameter'>n</code></dt>
+
<dd></dd><dd class='body--doc'><p>Number of lines to get, or all remaining if zero.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-not_all'></span>Parameter <code class='parameter'>not_all</code></dt>
+
<dd></dd><dd class='body--doc'><p>Set this parameter to ignore partial lines at EOF. This
+
is useful for eg monitoring a growing logfile.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>FILE</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='object unresolved'>FILE</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>mask</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Same as <code>Stdio.File()->openat()</code>, but returns a <code>Stdio.FILE</code>
+
object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->openat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>pipe</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>File</code> <b><span class='method'>pipe</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Same as <code>Stdio.File()->pipe()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Returns an <code>Stdio.File</code> object, NOT an <code>Stdio.FILE</code> object.</p>
+
<p> In future releases of Pike this will most likely change
+
to returning an <code>Stdio.FILE</code> object. This is already
+
the case if <code class='expr'>STDIO_DIRECT_FD</code> has been defined.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>printf</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>printf</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>data</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function does approximately the same as:
+
<code class='expr'><code>write</code>(<code>sprintf</code>(<code>format</code>,@<code>data</code>))</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>write()</code>, <code>sprintf()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>bytes</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>now</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read <code>bytes</code> (wide-) characters with buffering and support for
+
input conversion.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->read()</code>, <code>set_charset()</code>, <code>unread()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_charset</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_charset</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>charset</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets the input and output charset of this file to the specified
+
<code>charset</code>. If <code>charset</code> is 0 or not specified the environment
+
is used to try to detect a suitable charset.</p>
+
<p> The default charset if this function is not called is
+
<tt>"ISO-8859-1"</tt>.</p>
+
</dd><dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Consider using one of
+
ISO-IR-196 (<tt>"\e%G"</tt> - switch to UTF-8 with return)
+
or ISO-IR-190 (<tt>"\e%/G"</tt> - switch to UTF-8 level 1 no return)
+
or ISO-IR-191 (<tt>"\e%/H"</tt> - switch to UTF-8 level 2 no return)
+
or ISO-IR-192 (<tt>"\e%/I"</tt> - switch to UTF-8 level 3 no return)
+
or ISO-IR-193 (<tt>"\e%/J"</tt> - switch to UTF-16 level 1 no return)
+
or ISO-IR-194 (<tt>"\e%/K"</tt> - switch to UTF-16 level 2 no return)
+
or ISO-IR-195 (<tt>"\e%/L"</tt> - switch to UTF-16 level 3 no return)
+
or ISO-IR-162 (<tt>"\e%/@"</tt> - switch to UCS-2 level 1)
+
or ISO-IR-163 (<tt>"\e%/A"</tt> - switch to UCS-4 level 1)
+
or ISO-IR-174 (<tt>"\e%/C"</tt> - switch to UCS-2 level 2)
+
or ISO-IR-175 (<tt>"\e%/D"</tt> - switch to UCS-4 level 2)
+
or ISO-IR-176 (<tt>"\e%/E"</tt> - switch to UCS-2 level 3)
+
or ISO-IR-177 (<tt>"\e%/F"</tt> - switch to UCS-4 level 3)
+
or ISO-IR-178 (<tt>"\e%B"</tt> - switch to UTF-1)
+
automatically to encode wide strings.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>ungets</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>ungets</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function puts a line back in the input buffer. The line
+
can then be read with eg <code>read()</code>, <code>gets()</code> or <code>getchar()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The string is autoterminated by an extra line-feed.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>gets()</code>, <code>getchar()</code>, <code>unread()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unread</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>unread</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function puts a string back in the input buffer. The string
+
can then be read with eg <code>read()</code>, <code>gets()</code> or <code>getchar()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>gets()</code>, <code>getchar()</code>, <code>ungets()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>)|<code class='datatype'>string</code> <code class='argument'>what</code>, <code class='datatype'>mixed</code> ... <code class='argument'>fmt</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write <code>what</code> with support for output_conversion.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->write()</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Port</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Handles listening to socket ports. Whenever you need a bound
+
socket that is open and listens for connections you should
+
use this program.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>accept</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>File</code> <b><span class='method'>accept</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function completes a connection made from a remote machine to
+
this port. It returns a two-way stream in the form of a clone of
+
<code>Stdio.File</code>. The new file is by initially set to blocking mode.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>accept</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>accept</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the first connection request waiting for this port and return
+
it as a connected socket.</p>
+
<p> If no connection request is waiting and the port is in nonblocking
+
mode (i.e. an accept callback is installed) then zero is returned.
+
Otherwise this function waits until a connection has arrived.</p>
+
<p> In Pike 7.8 and later the returned object is created via <code>fd_factory()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.7 and later the resulting file object will be assigned
+
to the same backend as the port object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>ip</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Opens a socket and binds it to port number on the local machine.
+
If the second argument is present, the socket is set to
+
nonblocking and the callback funcition is called whenever
+
something connects to it. The callback will receive the id for
+
this port as argument and should typically call <code>accept</code> to
+
establish a connection.</p>
+
<p> If the optional argument <code>ip</code> is given, <code>bind</code> will try to bind
+
to an interface with that host name or IP number. Omitting this
+
will bind to all available IPv4 addresses; specifying "::" will
+
bind to all IPv4 and IPv6 addresses.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 is returned on success, zero on failure. <code>errno</code> provides
+
further details about the error in the latter case.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>accept</code>, <code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind_unix</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>bind_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Opens a Unix domain socket at the given path in the file system.
+
If the second argument is present, the socket is set to
+
nonblocking and the callback funcition is called whenever
+
something connects to it. The callback will receive the id for
+
this port as argument and should typically call <code>accept</code> to
+
establish a connection.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 is returned on success, zero on failure. <code>errno</code> provides
+
further details about the error in the latter case.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only available on systems that support Unix domain
+
sockets.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>path</code> had a quite restrictive length limit (~100 characters)
+
prior to Pike 7.8.334.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>accept</code>, <code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>close</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Closes the socket.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code>, <code class='datatype'>string</code> <code class='argument'>ip</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='argument'>"stdin"</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='argument'>"stdin"</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>If the first argument is other than <code class='expr'>"stdin"</code> the arguments will
+
be passed to <code>bind()</code>.</p>
+
<p> When create is called with <code class='expr'>"stdin"</code> as the first argument, a
+
socket is created out of the file descriptor <code class='expr'>0</code>. This is only
+
useful if it actually is a socket to begin with.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>ip</code><b>)</b></code><br>
+
<code><span class='object'>Stdio.Port</span> <span class='class'>Stdio.Port</span><b>(</b><code class='argument'>"stdin"</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>When called with an int or any string except <code class='expr'>"stdin"</code> as
+
first argument, this function does the same as <code>bind()</code> would do
+
with the same arguments.</p>
+
<p> When called with <code class='expr'>"stdin"</code> as argument, a socket is created
+
out of the file descriptor 0. This is only useful if that actually
+
IS a socket to begin with.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code>, <code>listen_fd</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>If the last call done on this port failed, this function will
+
return an integer describing what went wrong. Refer to your unix
+
manual for further information.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>fd_factory</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>protected</code> <code class='object unresolved'>Fd</code> <b><span class='method'>fd_factory</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Factory creating empty <code>Fd</code> objects.</p>
+
<p> This function is called by <code>accept()</code> when it needs to create
+
a new file.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>_port</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit _port</span> : <span class='inherit'>_port</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>listen_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>listen_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function does the same as <code>bind</code>, except that instead of
+
creating a new socket and bind it to a port, it expects the file
+
descriptor <code>fd</code> to be an already open port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only for the advanced user, and is generally used
+
when sockets are passed to Pike at exec time.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code>, <code>accept</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the address and port of the local socket end-point.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns the address and port of a socket end-point
+
on the form <code class='expr'>"x.x.x.x port"</code> (IPv4) or
+
<code class='expr'>"x:x:x:x:x:x:x:x port"</code> (IPv6).</p>
+
<p> If there is some error querying or formatting the address,
+
<code class='expr'>0</code> (zero) is returned and <code>errno()</code> will return the
+
error code.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An error is thrown if the socket isn't bound.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the accept callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>query_id</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function returns the id for this port. The id is normally the
+
first argument to accept_callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the accept callback.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object as long as the port
+
is accepting connections, but this object does not keep a
+
reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>set_id</span>(</b><code class='datatype'>mixed</code> <code class='argument'>id</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function sets the id used for accept_callback by this port.
+
The default id is <code>this_object()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_id</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.UDP</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>UDP (User Datagram Protocol) handling.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>MSG_OOB</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.UDP.<code class='constant'>MSG_OOB</code></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this constant.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>MSG_PEEK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.UDP.<code class='constant'>MSG_PEEK</code></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this constant.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>add_membership</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>add_membership</span>(</b><code class='datatype'>string</code> <code class='argument'>group</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Join a multicast group.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-group'></span>Parameter <code class='parameter'>group</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>group</code> contains the address of the multicast group the
+
application wants to join. It must be a valid multicast address.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>address</code> is the address of the local interface with which
+
the system should join to the multicast group. If not provided
+
the system will select an appropriate interface.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_ADD_MEMBERSHIP
+
and IPPROTO_IPV6 IPV6_JOIN_GROUP.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The <code>address</code> parameter is currently not supported for IPv6.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>drop_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>address</code>, <code class='datatype'>string</code>|<code class='datatype'>bool</code> <code class='argument'>no_reuseaddr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Binds a port for receiving or transmitting UDP.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-no_reuseaddr'></span>Parameter <code class='parameter'>no_reuseaddr</code></dt>
+
<dd></dd><dd class='body--doc'><p>If set to <code class='expr'>1</code>, Pike will not set the <code class='expr'>SO_REUSEADDR</code> option
+
on the UDP port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code class='expr'>SO_REUSEADDR</code> is never applied when binding a random port
+
(<code class='expr'>bind(0)</code>).</p>
+
<p> In general, <code class='expr'>SO_REUSEADDR</code> is not desirable on UDP ports.
+
Unless used for receiving multicast, be sure to never bind a
+
non-random port without setting <code class='expr'>no_reuseaddr</code> to <code class='expr'>1</code>.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws error when unable to bind port.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>close</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Closes an open UDP port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This method was introduced in Pike 7.5.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>address</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Establish an UDP connection.</p>
+
<p> This function connects an UDP socket previously created with
+
<code>Stdio.UDP()</code> to a remote socket. The <code>address</code> is the IP name or
+
number for the remote machine.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>If the socket is in nonblocking mode, you have to wait
+
for a write or close callback before you know if the connection
+
failed or not.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind()</code>, <code>query_address()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>drop_membership</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>drop_membership</span>(</b><code class='datatype'>string</code> <code class='argument'>group</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Leave a multicast group.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-group'></span>Parameter <code class='parameter'>group</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>group</code> contains the address of the multicast group the
+
application wants to join. It must be a valid multicast address.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>address</code> is the address of the local interface with which
+
the system should join to the multicast group. If not provided
+
the system will select an appropriate interface.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_DROP_MEMBERSHIP
+
and IPPROTO_IPV6 IPV6_LEAVE_GROUP.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The <code>address</code> parameter is currently not supported for IPv6.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>add_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable_broadcast</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>enable_broadcast</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the broadcast flag.
+
If enabled then sockets receive packets sent to a broadcast
+
address and they are allowed to send packets to a
+
broadcast address.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is normally only avalable to root users.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable_multicast</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>enable_multicast</span>(</b><code class='datatype'>string</code> <code class='argument'>reply_address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the local device for a multicast socket.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-reply_address'></span>Parameter <code class='parameter'>reply_address</code></dt>
+
<dd></dd><dd class='body--doc'><p>Local address that should appear in the multicast packets.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_MULTICAST_IF
+
and IPPROTO_IPV6 IPV6_MULTICAST_IF.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the error code for the last command on this object.
+
Error code is normally cleared when a command is successful.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_type</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_type</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns socket type and protocol family.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>UDP</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit _Stdio.UDP</span> : <span class='inherit'>UDP</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the local address of a socket on the form "x.x.x.x port".
+
If this file is not a socket, not connected or some other error occurs,
+
zero is returned.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the read callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Gets the file descriptor for this UDP port.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>) <b><span class='method'>read</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>) <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>flag</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read from the UDP socket.</p>
+
<p> Flag <code>flag</code> is a bitfield, 1 for out of band data and 2 for peek</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>mapping(string:int|string) in the form
+
([
+
"data" : string received data
+
"ip" : string received from this ip
+
"port" : int ...and this port
+
])</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_read_callback()</code>, <code>MSG_OOB</code>, <code>MSG_PEEK</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>send</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>send</span>(</b><code class='datatype'>string</code> <code class='argument'>to</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code> <code class='argument'>message</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>send</span>(</b><code class='datatype'>string</code> <code class='argument'>to</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code> <code class='argument'>message</code>, <code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Send data to a UDP socket. The recipient address will be <code>to</code>
+
and port will be <code>port</code>.</p>
+
<p> Flag <code>flag</code> is a bitfield, 1 for out of band data and
+
2 for don't route flag.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>The number of bytes that were actually written.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the read callback.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object as long as there can
+
be calls to the read callback, but this object does not keep a
+
reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>object</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this object to be blocking.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_buffer</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set internal socket buffer.</p>
+
<p> This function sets the internal buffer size of a socket or stream.</p>
+
<p> The second argument allows you to set the read or write buffer by
+
specifying <code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that this function actually does anything,
+
but it certainly helps to increase data transfer speed when it does.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Use the file descriptor <code>fd</code> for UDP.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_multicast_ttl</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>set_multicast_ttl</span>(</b><code class='datatype'>int</code> <code class='argument'>ttl</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the time-to-live value of outgoing multicast packets
+
for this socket.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-ttl'></span>Parameter <code class='parameter'>ttl</code></dt>
+
<dd></dd><dd class='body--doc'><p>The number of router hops sent multicast packets should
+
survive.</p>
+
<p> It is very important for multicast packets to set the
+
smallest TTL possible. The default before calling this
+
function is 1 which means that multicast packets don't
+
leak from the local network unless the user program
+
explicitly requests it.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_MULTICAST_TTL
+
and IPPROTO_IPV6 IPV6_MULTICAST_HOPS.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>add_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>UDP</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>), <code class='datatype'>mixed</code> ... :<code class='datatype'>void</code>) <code class='argument'>read_cb</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set this object to nonblocking mode.</p>
+
<p> If <code>read_cb</code> and <code>extra_args</code> are specified, they will be passed on
+
to <code>set_read_callback()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>The called object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_read_callback</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_read_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>), <code class='datatype'>mixed</code> ... :<code class='datatype void'>void</code>) <code class='argument'>read_cb</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The <code>read_cb</code> function will receive a mapping similar to the mapping
+
returned by <code>read()</code>:</p>
+
<table class='box'><tr><td><code><code class='key'>"data"</code> : <code class='datatype'>string</code></code></td><td><p>Received data.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"ip"</code> : <code class='datatype'>string</code></code></td><td><p>Data was sent from this IP.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>"port"</code> : <code class='datatype'>int</code></code></td><td><p>Data was sent from this port.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>The called object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_type</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_type</span>(</b><code class='datatype'>int</code> <code class='argument'>sock_type</code><b>)</b></code><br>
+
<code><code class='object unresolved'>UDP</code> <b><span class='method'>set_type</span>(</b><code class='datatype'>int</code> <code class='argument'>sock_type</code>, <code class='datatype'>int</code> <code class='argument'>family</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets socket type and protocol family.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>wait</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>wait</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check for data and wait max. <code>timeout</code> seconds.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> if data are ready, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Module <b class='ms datatype'>Stdio.Terminfo</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getFallbackTerm</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>protected</code> <code class='object unresolved'>Termcap</code> <b><span class='method'>getFallbackTerm</span>(</b><code class='datatype'>string</code> <code class='argument'>term</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns an object describing the fallback terminal for the terminal
+
<code>term</code>. This is usually equvivalent to <code>Stdio.Terminfo.getTerm("dumb")</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p>Stdio.Terminfo.getTerm</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getTerm</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Termcap</code> <b><span class='method'>getTerm</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>term</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns an object describing the terminal term. If term is not specified, it will
+
default to <code>getenv("TERM")</code> or if that fails to "dumb".</p>
+
<p> Lookup of terminal information will first be done in the systems terminfo
+
database, and if that fails in the termcap database. If neither database exists, a
+
hardcoded entry for "dumb" will be used.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p>Stdio.Terminfo.getTerminfo, Stdio.Terminfo.getTermcap, Stdio.getFallbackTerm</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getTermcap</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Termcap</code> <b><span class='method'>getTermcap</span>(</b><code class='datatype'>string</code> <code class='argument'>term</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the terminal description object for <code>term</code> from the
+
systems termcap database. Returns 0 if not found.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p>Stdio.Terminfo.getTerm, Stdio.Terminfo.getTerminfo</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getTerminfo</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Terminfo</code> <b><span class='method'>getTerminfo</span>(</b><code class='datatype'>string</code> <code class='argument'>term</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the terminal description object for <code>term</code> from the
+
systems terminfo database. Returns 0 if not found.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p>Stdio.Terminfo.getTerm, Stdio.Terminfo.getTermcap</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_tty</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_tty</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns 1 if <code>Stdio.stdin</code> is connected to an interactive
+
terminal that can handle backspacing, carriage return without
+
linefeed, and the like.</p>
+
</dd></dl>
+
<dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Terminfo.MetaTerminfoDB</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p><code>TerminfoDB</code> that merges several directorys.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Terminfo.MetaTerminfoDB</span> <span class='class'>Stdio.Terminfo.MetaTerminfoDB</span><b>(</b><code class='datatype'>array</code>(<code class='object unresolved'>TerminfoDB</code>|<code class='datatype'>string</code>)|<code class='datatype'>void</code> <code class='argument'>dbs</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Create a new Meta <code>TerminfoDB</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-dbs'></span>Parameter <code class='parameter'>dbs</code></dt>
+
<dd></dd><dd class='body--doc'><p>Array with elements in priority order. Elements may be either</p>
+
<table class='box'><tr><td><code><code class='object unresolved'>TerminfoDB</code></code></td><td><p>An active <code>TerminfoDB</code>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>string</code></code></td><td><p>A directory that may exist and contain a terminfo database.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>If the resulting set of <code>TerminfoDB</code>'s is empty,
+
the object will be destructed.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Terminfo.Termcap</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Termcap terminal description object.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>aliases</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) Stdio.Terminfo.Termcap.<b><span class='variable'>aliases</span></b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Terminfo.Termcap</span> <span class='class'>Stdio.Terminfo.Termcap</span><b>(</b><code class='datatype'>string</code> <code class='argument'>cap</code>, <code class='object unresolved'>TermcapDB</code>|<code class='datatype'>void</code> <code class='argument'>tcdb</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>maxrecurse</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>TermMachine</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit TermMachine</span> : <span class='inherit'>TermMachine</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tputs</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>tputs</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Put termcap string</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Terminfo.TermcapDB</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Termcap database</p>
+
</dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Terminfo.Terminfo</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Terminfo terminal description object</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>aliases</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) Stdio.Terminfo.Terminfo.<b><span class='variable'>aliases</span></b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Terminfo.Terminfo</span> <span class='class'>Stdio.Terminfo.Terminfo</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>TermMachine</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit TermMachine</span> : <span class='inherit'>TermMachine</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tputs</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>tputs</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Terminfo.TerminfoDB</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Terminfo database for a single directory.</p>
+
</dd></dl></dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Readline</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>add_to_kill_ring</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_to_kill_ring</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Readline</span> <span class='class'>Stdio.Readline</span><b>(</b><code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>infd</code>, <code class='datatype'>object</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>interm</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>outfd</code>, <code class='datatype'>object</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>outterm</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Creates a Readline object, that takes input from <code>infd</code> and has output
+
on <code>outfd</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-infd'></span>Parameter <code class='parameter'>infd</code></dt>
+
<dd></dd><dd class='body--doc'><p>Defaults to <code>Stdio.stdin</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-interm'></span>Parameter <code class='parameter'>interm</code></dt>
+
<dd></dd><dd class='body--doc'><p>Defaults to <code>Stdio.Terminfo.getTerm()</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-outfd'></span>Parameter <code class='parameter'>outfd</code></dt>
+
<dd></dd><dd class='body--doc'><p>Defaults to <code>infd</code>, unless <code>infd</code> is 0, in which case
+
<code>outfd</code> defaults to <code>Stdio.stdout</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-outterm'></span>Parameter <code class='parameter'>outterm</code></dt>
+
<dd></dd><dd class='body--doc'><p>Defaults to <code>interm</code>.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>delete</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>delete</span>(</b><code class='datatype'>int</code> <code class='argument'>p1</code>, <code class='datatype'>int</code> <code class='argument'>p2</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>delta_history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>delta_history</span>(</b><code class='datatype'>int</code> <code class='argument'>d</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Changes the line to a line from the history <code>d</code> steps from the
+
current entry (0 being the current line, negative values older,
+
and positive values newer).</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Only effective if you have a history object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>edit</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>edit</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>local_prompt</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>)|<code class='datatype'>void</code> <code class='argument'>attrs</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable_history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>enable_history</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>)|<code class='object unresolved'>History</code>|<code class='datatype'>int</code> <code class='argument'>hist</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>eof</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>eof</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_history</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>History</code> <b><span class='method'>get_history</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_input_controller</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>InputController</code> <b><span class='method'>get_input_controller</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>get current input control object</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Terminal input controller object</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_output_controller</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>OutputController</code> <b><span class='method'>get_output_controller</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>get current output control object</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Terminal output controller object</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_prompt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>get_prompt</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the current prompt string.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getcursorpos</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>getcursorpos</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getmark</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>getmark</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>gettext</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>gettext</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>history</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>insert</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>insert</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code>, <code class='datatype'>int</code> <code class='argument'>p</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill</span>(</b><code class='datatype'>int</code> <code class='argument'>p1</code>, <code class='datatype'>int</code> <code class='argument'>p2</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_ring_yank</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>kill_ring_yank</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>list_completions</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>list_completions</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>c</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>message</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>message</span>(</b><code class='datatype'>string</code> <code class='argument'>msg</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Print a message to the output device</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>newline</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>newline</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>pointmark</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>pointmark</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>prompt</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>)|<code class='datatype'>void</code> <code class='argument'>attrs</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>redisplay</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>redisplay</span>(</b><code class='datatype'>int</code> <code class='argument'>clear</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>nobackup</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>region</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>region</span>(</b><code class='datatype'>int</code> ... <code class='argument'>args</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_echo</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_echo</span>(</b><code class='datatype'>int</code> <code class='argument'>onoff</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set text echo on or off.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-onoff'></span>Parameter <code class='parameter'>onoff</code></dt>
+
<dd></dd><dd class='body--doc'><p>1 for echo, 0 for no echo.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>f</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_prompt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>set_prompt</span>(</b><code class='datatype'>string</code> <code class='argument'>newp</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>)|<code class='datatype'>void</code> <code class='argument'>newattrs</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the prompt string.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-newp'></span>Parameter <code class='parameter'>newp</code></dt>
+
<dd></dd><dd class='body--doc'><p>New prompt string</p>
+
</dd>
+
<dt class='head--doc'><span id='p-newattrs'></span>Parameter <code class='parameter'>newattrs</code></dt>
+
<dd></dd><dd class='body--doc'><p>Terminal attributes</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>setcursorpos</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>setcursorpos</span>(</b><code class='datatype'>int</code> <code class='argument'>p</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>setmark</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>setmark</span>(</b><code class='datatype'>int</code> <code class='argument'>p</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>msg</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>word_wrap</code><b>)</b></code></p></dd>
+
<dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Document this function</p>
+
</dd></dl>
+
<dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Readline.DefaultEditKeys</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>backward_char</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>backward_char</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>backward_delete_char</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>backward_delete_char</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>backward_kill_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>backward_kill_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>backward_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>backward_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>beginning_of_line</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>beginning_of_line</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>capitalize_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>capitalize_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>clear_screen</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>clear_screen</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Readline.DefaultEditKeys</span> <span class='class'>Stdio.Readline.DefaultEditKeys</span><b>(</b><code class='datatype'>object</code> <code class='argument'>readline</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>delete_char</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>delete_char</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>delete_char_or_eof</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>delete_char_or_eof</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>down_history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>down_history</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>downcase_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>downcase_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>end_of_line</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>end_of_line</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>forward_char</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>forward_char</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>forward_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>forward_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_line</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill_line</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_region</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill_region</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_ring_save</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill_ring_save</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_whole_line</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill_whole_line</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>kill_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>kill_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>newline</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>newline</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>quoted_insert</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>quoted_insert</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>redisplay</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>redisplay</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>self_insert_command</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>self_insert_command</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_default_bindings</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>protected</code> <code class='datatype'>void</code> <b><span class='method'>set_default_bindings</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_mark</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_mark</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>swap_mark_and_point</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>swap_mark_and_point</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>transpose_chars</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>transpose_chars</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>up_history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>up_history</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>upcase_word</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>upcase_word</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>yank</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>yank</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Readline.History</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Readline.History</span> <span class='class'>Stdio.Readline.History</span><b>(</b><code class='datatype'>int</code> <code class='argument'>maxhist</code>, <code class='datatype'>void</code>|<code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>hist</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>encode</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>encode</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>finishline</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>finishline</span>(</b><code class='datatype'>string</code> <code class='argument'>text</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_history_num</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>get_history_num</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>history</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code>, <code class='datatype'>string</code> <code class='argument'>text</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>initline</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>initline</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_max_history</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_max_history</span>(</b><code class='datatype'>int</code> <code class='argument'>maxhist</code><b>)</b></code></p></dd>
+
</dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Readline.InputController</b></h2>
+
</dt><dd><dl class='group--doc'><dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Ought to have support for charset conversion.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>bind</span>(</b><code class='datatype'>string</code> <code class='argument'>k</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>f</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bindstr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>bindstr</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>f</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bindtc</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>bindtc</span>(</b><code class='datatype'>string</code> <code class='argument'>cap</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>f</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Readline.InputController</span> <span class='class'>Stdio.Readline.InputController</span><b>(</b><code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>_infd</code>, <code class='datatype'>object</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>_term</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>disable</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>disable</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>enable</span>(</b><code class='datatype'>int</code> ... <code class='argument'>e</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getbinding</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>getbinding</span>(</b><code class='datatype'>string</code> <code class='argument'>k</code>, <code class='datatype'>string</code> <code class='argument'>cap</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getbindings</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>function</code>(:<code class='datatype void'>void</code>)) <b><span class='method'>getbindings</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getbindingstr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>getbindingstr</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getbindingtc</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>getbindingtc</span>(</b><code class='datatype'>string</code> <code class='argument'>cap</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>grabnextkey</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>grabnextkey</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>g</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>isenabled</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>isenabled</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>nullbindings</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>nullbindings</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Clears the bindings.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>parsekey</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>parsekey</span>(</b><code class='datatype'>string</code> <code class='argument'>k</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>run_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>run_blocking</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_close_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_close_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype'>int</code>) <code class='argument'>ccb</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unbind</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>unbind</span>(</b><code class='datatype'>string</code> <code class='argument'>k</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unbindstr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>unbindstr</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unbindtc</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>unbindtc</span>(</b><code class='datatype'>string</code> <code class='argument'>cap</code><b>)</b></code></p></dd>
+
</dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Readline.OutputController</b></h2>
+
</dt><dd><dl class='group--doc'><dt class='head--fixme'>FIXME</dt>
+
<dd class='body--fixme'><p>Ought to have support for charset conversion.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>beep</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>beep</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bol</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>bol</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>check_columns</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>check_columns</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check and return the terminal width.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.4 and earlier this function returned <code class='expr'>void</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>get_number_of_columns</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>clear</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>clear</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>partial</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Readline.OutputController</span> <span class='class'>Stdio.Readline.OutputController</span><b>(</b><code class='object unresolved'>.File</code>|<code class='datatype'>void</code> <code class='argument'>_outfd</code>, <code class='object unresolved'>.Terminfo.Termcap</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>_term</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>disable</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>disable</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>enable</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>erase</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>erase</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_number_of_columns</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>get_number_of_columns</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the width of the terminal.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Does not check the width of the terminal.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>check_columns</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_erase</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_erase</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_move_backward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_move_backward</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_move_downward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_move_downward</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_move_forward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_move_forward</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_move_upward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_move_upward</span>(</b><code class='datatype'>int</code> <code class='argument'>n</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>low_write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>low_write</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>word_break</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>move_backward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>move_backward</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>move_forward</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>move_forward</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>newline</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>newline</span>(</b><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>turn_off</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>turn_off</span>(</b><code class='datatype'>string</code> ... <code class='argument'>atts</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the provided attributes to off.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>turn_on</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>turn_on</span>(</b><code class='datatype'>string</code> ... <code class='argument'>atts</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the provided attributes to on.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>word_break</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>hide</code><b>)</b></code></p></dd>
+
</dl>
+
</dd></dl></dd></dl><dl><dt><h2 class='header'>Module <b class='ms datatype'>Stdio</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DATA_CHUNK_SIZE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'><code class='modifier'>final</code> constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>DATA_CHUNK_SIZE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Size used in various places to divide incoming or outgoing data
+
into chunks.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_ACCESS</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_ACCESS</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when files
+
within a directory are accessed.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_ATTRIB</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_ATTRIB</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when attributes
+
of files within a directory are changed.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_CREATE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_CREATE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when new
+
files are created within a directory.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_DELETE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_DELETE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when files
+
are deleted within a directory.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_MODIFY</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_MODIFY</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when files
+
within a directory are modified.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_MULTISHOT</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_MULTISHOT</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code>. If DN_MULTISHOT is used, signals will
+
be sent for all notifications the program has registred for. Otherwise
+
only the first event the program is listening for will be received and
+
then the program must reregister for the events to receive futher events.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>DN_RENAME</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>DN_RENAME</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.notify()</code> to get a callback when files
+
within a directory are renamed.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_ATTRIB</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_ATTRIB</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_DELETE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_DELETE</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_EXTEND</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_EXTEND</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_LINK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_LINK</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_RENAME</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_RENAME</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_REVOKE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_REVOKE</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_WRITE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>NOTE_WRITE</code></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BIDIRECTIONAL</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_BIDIRECTIONAL</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file is bi-directional.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BUFFERED</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_BUFFERED</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file is buffered (usually 4KB).</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_IPC</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_IPC</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file may be used for inter process communication.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_NONBLOCK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_NONBLOCK</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file supports nonblocking I/O.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_REVERSE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_REVERSE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Request reversed operation.</p>
+
<p> Used as argument to <code>Stdio.File()->pipe()</code>, when
+
<code>PROP_BIDIRECTIONAL</code> hasn't been specified, to
+
request the direction of the resulting pipe to
+
reversed.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SEND_FD</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_SEND_FD</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The <code>Stdio.File</code> object might support the <code>Stdio.File()->send_fd()</code>
+
operation.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code>, <code>Stdio.File()->send_fd()</code>,
+
<code>Stdio.File()->receive_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SHUTDOWN</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.<code class='constant'>PROP_SHUTDOWN</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file supports shutting down transmission in either
+
direction.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->close()</code>, <code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>TCSADRAIN</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>string</code> Stdio.<code class='constant'>TCSADRAIN</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Argument to <code>Stdio.File()->tcsetattr()</code>.</p>
+
<p> Change after all output has been written.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>TCSAFLUSH</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>string</code> Stdio.<code class='constant'>TCSAFLUSH</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Argument to <code>Stdio.File()->tcsetattr()</code>.</p>
+
<p> Change after all output has been written,
+
and empty the input buffers.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>TCSANOW</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>string</code> Stdio.<code class='constant'>TCSANOW</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Argument to <code>Stdio.File()->tcsetattr()</code>.</p>
+
<p> Change immediately.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>XATTR_CREATE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>XATTR_CREATE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a pure
+
create, which will fail if the attribute already exists.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>XATTR_REPLACE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>XATTR_REPLACE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a replace,
+
which will fail the the attribute does not already exists.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__HAVE_OOB__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>__HAVE_OOB__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Exists and has the value 1 if OOB operations are available.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.5 and later OOB operations are always present.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__HAVE_SEND_FD__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>__HAVE_SEND_FD__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Support for sending of file descriptors over
+
<code>Stdio.File()->pipe()</code> objects with <code>PROP_SEND_FD</code>
+
capability is supported.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->send_fd()</code>, <code>Stdio.File()->receive_fd()</code>,
+
<code>Stdio.File()->read()</code>, <code>Stdio.File()->write()</code>,
+
<code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__OOB__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> Stdio.<code class='constant'>__OOB__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Implementation level of nonblocking I/O OOB support.</p>
+
<table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Nonblocking OOB support is not supported.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>1</code></code></td><td><p>Nonblocking OOB works a little.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>2</code></code></td><td><p>Nonblocking OOB almost works.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>3</code></code></td><td><p>Nonblocking OOB works as intended.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>-1</code></code></td><td><p>Unknown level of nonblocking OOB support.</p>
+
</td></tr>
+
</table><p>This constant only exists when OOB operations are
+
available, i.e. when <code>__HAVE_OOB__</code> is 1.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>append_file</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>append_file</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>str</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>access</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Append the string <code>str</code> onto the file <code>filename</code>.</p>
+
<p> For a description of <code>access</code>, see <code>Stdio.File->open()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws an error if <code>filename</code> couldn't be opened for writing.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the number of bytes written, i.e. <code class='expr'>sizeof(str)</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>write_file()</code>, <code>read_bytes()</code>, <code>Stdio.File()->open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>append_path</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>append_path_unix</b></span><br>
+
<span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>append_path_nt</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>append_path</span>(</b><code class='datatype'>string</code> <code class='argument'>absolute</code>, <code class='datatype'>string</code> ... <code class='argument'>relative</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>append_path_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>absolute</code>, <code class='datatype'>string</code> ... <code class='argument'>relative</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>append_path_nt</span>(</b><code class='datatype'>string</code> <code class='argument'>absolute</code>, <code class='datatype'>string</code> ... <code class='argument'>relative</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Append <code>relative</code> paths to an <code>absolute</code> path and remove any
+
<code class='expr'>"//"</code>, <code class='expr'>"../"</code> or <code class='expr'>"/."</code> to produce a
+
straightforward absolute path as a result.</p>
+
<p> <code class='expr'>"../"</code> is ignorded in the relative paths if it makes the
+
created path begin with something else than the absolute path
+
(or so far created path).</p>
+
<p> <code>append_path_nt()</code> fixes drive letter issues in <code>relative</code>
+
by removing the colon separator <code class='expr'>":"</code> if it exists (k:/fnord appends
+
as k/fnord)</p>
+
<p> <code>append_path_nt()</code> also makes sure that UNC path(s) in <code>relative</code> is appended
+
correctly by removing any <code class='expr'>"\\"</code> or <code class='expr'>"//"</code> from the beginning.</p>
+
<p> <code>append_path()</code> is equivalent to <code>append_path_unix()</code> on UNIX-like
+
operating systems, and equivalent to <code>append_path_nt()</code> on NT-like
+
operating systems.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>combine_path()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>async_cp</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>async_cp</span>(</b><code class='datatype'>string</code> <code class='argument'>from</code>, <code class='datatype'>string</code> <code class='argument'>to</code>, <code class='datatype'>function</code>(<code class='datatype'>int</code>, <code class='datatype'>mixed</code> ... :<code class='datatype'>void</code>) <code class='argument'>callback</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Copy a file asynchronously.</p>
+
<p> This function is similar to <code>cp()</code>, but works asynchronously.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-from'></span>Parameter <code class='parameter'>from</code></dt>
+
<dd></dd><dd class='body--doc'><p>Name of file to copy.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-to'></span>Parameter <code class='parameter'>to</code></dt>
+
<dd></dd><dd class='body--doc'><p>Name of file to create or replace with a copy of <code>from</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-callback'></span>Parameter <code class='parameter'>callback</code></dt>
+
<dd></dd><dd class='body--doc'><p>Function to be called on completion.
+
The first argument will be <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero)
+
otherwise. The rest of the arguments to <code>callback</code> are passed
+
verbatim from <code>args</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-args'></span>Parameter <code class='parameter'>args</code></dt>
+
<dd></dd><dd class='body--doc'><p>Extra arguments to pass to <code>callback</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>For <code>callback</code> to be called, the backend must be active (ie
+
<code>main()</code> must have returned <code class='expr'>-1</code>, or <code>Pike.DefaultBackend</code>
+
get called in some other way). The actual copying may start
+
before the backend has activated.</p>
+
</dd>
+
<dt class='head--doc'>Bugs</dt>
+
<dd class='body--doc'><p>Currently the file sizes are not compared, so the destination file
+
(<code>to</code>) may be truncated.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>cp()</code>, <code>sendfile()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>convert_modestring2int</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>convert_modestring2int</span>(</b><code class='datatype'>string</code> <code class='argument'>mode_string</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Convert the mode_string string as returned by Stdio.Stat object
+
to int suitable for chmod</p>
+
</dd>
+
<dt class='head--doc'><span id='p-mode_string'></span>Parameter <code class='parameter'>mode_string</code></dt>
+
<dd></dd><dd class='body--doc'><p>The string as return from Stdio.Stat()->mode_string</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>An int matching the permission of the mode_string string suitable for
+
chmod</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>cp</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>cp</span>(</b><code class='datatype'>string</code> <code class='argument'>from</code>, <code class='datatype'>string</code> <code class='argument'>to</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Copies the file <code>from</code> to the new position <code>to</code>. If there is
+
no system function for cp, a new file will be created and the
+
old one copied manually in chunks of <code>DATA_CHUNK_SIZE</code> bytes.
+
This function can also copy directories recursively.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>0 on error, 1 on success</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function keeps file and directory mode bits, unlike in Pike
+
7.6 and earlier.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>exist</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>exist</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if a <code>path</code> exists.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns true if the given path exists (is a directory or file),
+
otherwise false.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>May fail with eg <code>errno()</code> <tt>EFBIG</tt> if the file exists,
+
but the filesystem doesn't support the file size.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>is_dir()</code>, <code>is_file()</code>, <code>is_link()</code>, <code>file_stat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>file_equal</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>file_equal</span>(</b><code class='datatype'>string</code> <code class='argument'>file_1</code>, <code class='datatype'>string</code> <code class='argument'>file_2</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns nonzero if the given paths are files with identical
+
content, returns zero otherwise. Zero is also returned for any
+
sort of I/O error.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>file_size</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>file_size</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Give the size of a file. Size -1 indicates that the file either
+
does not exist, or that it is not readable by you. Size -2
+
indicates that it is a directory, -3 that it is a symlink and -4
+
that it is a device.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>file_stat()</code>, <code>write_file()</code>, <code>read_bytes()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_all_active_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_all_active_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the id of all the active file descriptors.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>gethostip</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mapping</code>) <b><span class='method'>gethostip</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the IP addresses of the host.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns a mapping that maps interface name to a mapping with
+
more information about that interface. That information mapping
+
looks as follows.</p>
+
<table class='box'><tr><td><code><code class='key'>"ips"</code> : <code class='datatype'>array</code>(<code class='datatype'>string</code>)</code></td><td><p>A list of all IP addresses bound to this interface.</p>
+
</td></tr>
+
</table></dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>_Stdio</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit _Stdio</span> : <span class='inherit'>_Stdio</span></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_dir</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_dir</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if a <code>path</code> is a directory.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns true if the given path is a directory, otherwise false.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>exist()</code>, <code>is_file()</code>, <code>is_link()</code>, <code>file_stat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_file</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_file</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if a <code>path</code> is a file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns true if the given path is a regular file, otherwise false.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>exist()</code>, <code>is_dir()</code>, <code>is_link()</code>, <code>file_stat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_link</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_link</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if a <code>path</code> is a symbolic link.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns true if the given path is a symbolic link, otherwise false.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>exist()</code>, <code>is_dir()</code>, <code>is_file()</code>, <code>file_stat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>mkdirhier</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>mkdirhier</span>(</b><code class='datatype'>string</code> <code class='argument'>pathname</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Creates zero or more directories to ensure that the given <code>pathname</code> is
+
a directory.</p>
+
<p> If a <code>mode</code> is given, it's used for the new directories after being &'ed
+
with the current umask (on OS'es that support this).</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns zero on failure and nonzero on success.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>mkdir()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>perror</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>perror</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function prints a message to stderr along with a description
+
of what went wrong if available. It uses the system errno to find
+
out what went wrong, so it is only applicable to IO errors.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>werror()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_bytes</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_bytes</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int</code> <code class='argument'>start</code>, <code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_bytes</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int</code> <code class='argument'>start</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_bytes</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read <code>len</code> number of bytes from a regular file <code>filename</code>
+
starting at byte <code>start</code>, and return it as a string.</p>
+
<p> If <code>len</code> is omitted, the rest of the file will be returned.</p>
+
<p> If <code>start</code> is also omitted, the entire file will be returned.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws an error on any I/O error except when the file doesn't
+
exist.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) if the file doesn't exist or if
+
<code>start</code> is beyond the end of it.</p>
+
<p> Returns a string with the requested data otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_file</code>, <code>write_file()</code>, <code>append_file()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_file</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_file</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_file</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int</code> <code class='argument'>start</code>, <code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read <code>len</code> lines from a regular file <code>filename</code> after skipping
+
<code>start</code> lines and return those lines as a string. If both
+
<code>start</code> and <code>len</code> are omitted the whole file is read.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws an error on any I/O error except when the file doesn't
+
exist.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) if the file doesn't exist or if
+
<code>start</code> is beyond the end of it.</p>
+
<p> Returns a string with the requested data otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_bytes()</code>, <code>write_file()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>recursive_mv</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>recursive_mv</span>(</b><code class='datatype'>string</code> <code class='argument'>from</code>, <code class='datatype'>string</code> <code class='argument'>to</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Copy a file or a directory tree by copying and then
+
removing. Mode bits are preserved in the copy.
+
It's not the fastest but works on every OS and
+
works well across different file systems.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns 0 on failure, nonzero otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>recursive_rm</code> <code>cp</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>recursive_rm</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>recursive_rm</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remove a file or a directory tree.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns 0 on failure, nonzero otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>rm</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>sendfile</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>object</code> <b><span class='method'>sendfile</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>headers</code>, <code class='object unresolved'>File</code> <code class='argument'>from</code>, <code class='datatype'>int</code> <code class='argument'>offset</code>, <code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>trailers</code>, <code class='object unresolved'>File</code> <code class='argument'>to</code><b>)</b></code><br>
+
<code><code class='datatype'>object</code> <b><span class='method'>sendfile</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>headers</code>, <code class='object unresolved'>File</code> <code class='argument'>from</code>, <code class='datatype'>int</code> <code class='argument'>offset</code>, <code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>trailers</code>, <code class='object unresolved'>File</code> <code class='argument'>to</code>, <code class='datatype'>function</code>(<code class='datatype'>int</code>, <code class='datatype'>mixed</code> ... :<code class='datatype'>void</code>) <code class='argument'>callback</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sends <code>headers</code> followed by <code>len</code> bytes starting at <code>offset</code>
+
from the file <code>from</code> followed by <code>trailers</code> to the file <code>to</code>.
+
When completed <code>callback</code> will be called with the total number of
+
bytes sent as the first argument, followed by <code>args</code>.</p>
+
<p> Any of <code>headers</code>, <code>from</code> and <code>trailers</code> may be left out
+
by setting them to <code class='expr'>0</code>.</p>
+
<p> Setting <code>offset</code> to <code class='expr'>-1</code> means send from the current position in
+
<code>from</code>.</p>
+
<p> Setting <code>len</code> to <code class='expr'>-1</code> means send until <code>from</code>'s end of file is
+
reached.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The sending is performed asynchronously, and may complete
+
both before and after the function returns.</p>
+
<p> For <code>callback</code> to be called, the backend must be active (ie
+
<code>main()</code> must have returned <code class='expr'>-1</code>, or <code>Pike.DefaultBackend</code>
+
get called in some other way).</p>
+
<p> In some cases, the backend must also be active for any sending to
+
be performed at all.</p>
+
<p> In Pike 7.4.496, Pike 7.6.120 and Pike 7.7 and later the backend
+
associated with <code>to</code> will be used rather than the default backend.
+
Note that you usually will want <code>from</code> to have the same backend as <code>to</code>.</p>
+
</dd>
+
<dt class='head--doc'>Bugs</dt>
+
<dd class='body--doc'><p>FIXME: Support for timeouts?</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File->set_nonblocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>simplify_path</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>simplify_path</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns a canonic representation of <code>path</code> (without /./, /../, //
+
and similar path segments).</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>stderr</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>FILE</code> Stdio.<b><span class='variable'>stderr</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>An instance of <tt>FILE("stderr")</tt>, the standard error stream. Use this
+
when you want to output error messages.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>predef::werror()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>stdin</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>FILE</code> Stdio.<b><span class='variable'>stdin</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>An instance of <tt>FILE("stdin")</tt>, the standard input stream. Use this
+
when you want to read anything from the standard input.
+
This example will read lines from standard input for as long as there
+
are more lines to read. Each line will then be written to stdout together
+
with the line number. We could use <code>Stdio.stdout.write()</code> instead
+
of just <code>write()</code>, since they are the same function.</p>
+
</dd>
+
<dt class='head--doc'>Example</dt>
+
<dd class='example'><pre><p>int main()
+
{
+
int line;
+
while(string s=Stdio.stdin.gets())
+
write("%5d: %s\n", line++, s);
+
}</p>
+
</pre></dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>stdout</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>FILE</code> Stdio.<b><span class='variable'>stdout</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>An instance of <tt>FILE("stdout")</tt>, the standatd output stream. Use this
+
when you want to write anything to the standard output.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>predef::write()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>werror</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>werror</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write a message to stderr. Stderr is normally the console, even if
+
the process output has been redirected to a file or pipe.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is identical to <code>predef::werror()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>predef::werror()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write_file</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write_file</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>str</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>access</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write the string <code>str</code> onto the file <code>filename</code>. Any existing
+
data in the file is overwritten.</p>
+
<p> For a description of <code>access</code>, see <code>Stdio.File()->open()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws an error if <code>filename</code> couldn't be opened for writing.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the number of bytes written, i.e. <code class='expr'>sizeof(str)</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>append_file()</code>, <code>read_bytes()</code>, <code>Stdio.File()->open()</code></p>
+
</dd></dl>
+
<dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.BlockFile</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The Stdio.BlockFile API.</p>
+
<p> This class exists purely for typing reasons.</p>
+
<p> Use in types in place of <code>Stdio.File</code> where only blocking
+
I/O is done with the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stream</code>, <code>NonblockingStream</code>, <code>File</code>, <code>FILE</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Stream</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit Stream</span> : <span class='inherit'>Stream</span></code></p></dd>
+
</dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.FakeFile</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>A string wrapper that pretends to be a <code>Stdio.File</code> object
+
in addition to some features of a <code>Stdio.FILE</code> object.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>_sizeof</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(0..)</code> <b><span class='method'>sizeof</span>(</b> <span class='class'>Stdio.FakeFile</span> <span class='argument'>arg</span> <b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sizeof on a FakeFile returns the size of its contents.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>cast</b></span>
+
</dt>
+
<dd><p><code><b>(</b><span class='datatype'>int</span><b>)</b><span class='class'>Stdio.FakeFile</span>()<br><b>(</b><span class='datatype'>float</span><b>)</b><span class='class'>Stdio.FakeFile</span>()<br><b>(</b><span class='datatype'>string</span><b>)</b><span class='class'>Stdio.FakeFile</span>()<br><b>(</b><span class='datatype'>array</span><b>)</b><span class='class'>Stdio.FakeFile</span>()<br><b>(</b><span class='datatype'>mapping</span><b>)</b><span class='class'>Stdio.FakeFile</span>()<br><b>(</b><span class='datatype'>multiset</span><b>)</b><span class='class'>Stdio.FakeFile</span>()</code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>A FakeFile can be casted to a string.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>direction</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->close()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.FakeFile</span> <span class='class'>Stdio.FakeFile</span><b>(</b><code class='datatype'>string</code> <code class='argument'>data</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>type</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>pointer</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->create()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>this_program</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->dup()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Always returns 0.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->errno()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getchar</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>getchar</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.FILE()->getchar()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>gets</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>gets</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.FILE()->gets()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>is_fake_file</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> Stdio.FakeFile.<code class='constant'>is_fake_file</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This constant can be used to distinguish a FakeFile object
+
from a real <code>Stdio.File</code> object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>line_iterator</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>String.SplitIterator</code> <b><span class='method'>line_iterator</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>trim</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->line_iterator()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>peek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code>|<code class='datatype'>void</code> <code class='argument'>timeout</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->peek()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>is_local</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Always returns 0.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_address()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_close_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>query_close_callback</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_close_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>query_id</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_id()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_read_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>query_read_callback</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_read_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_read_oob_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>query_read_oob_callback</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_read_oob_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_write_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>query_write_callback</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_write_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_write_oob_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <b><span class='method'>query_write_oob_callback</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->query_write_oob_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>void</code>|<code class='datatype'>int(0..)</code> <code class='argument'>len</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->read()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_function</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>function</code>(:<code class='datatype'>string</code>) <b><span class='method'>read_function</span>(</b><code class='datatype'>int</code> <code class='argument'>nbytes</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->read_function()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>seek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>pos</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>mult</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>add</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->seek()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_blocking</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking_keep_callbacks</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking_keep_callbacks</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_blocking_keep_callbacks</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_close_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_close_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_close_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_id</span>(</b><code class='datatype'>mixed</code> <code class='argument'>_id</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_id()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>rcb</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>wcb</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>ccb</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>rocb</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>wocb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_blocking</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking_keep_callbacks</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking_keep_callbacks</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_blocking_keep_callbacks</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_read_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_read_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_read_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_read_oob_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_read_oob_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_read_oob_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_write_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_write_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_write_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_write_oob_callback</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_write_oob_callback</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>cb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->set_write_oob_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>stat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.Stat</code> <b><span class='method'>stat</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns size and the creation time of the string.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>sync</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(1..1)</code> <b><span class='method'>sync</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Always returns 1.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->sync()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tell</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>tell</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->tell()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>truncate</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>truncate</span>(</b><code class='datatype'>int</code> <code class='argument'>length</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->truncate()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unread</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>unread</span>(</b><code class='datatype'>string</code> <code class='argument'>s</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.FILE()->unread()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(-1..)</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code>|<code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>str</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->write()</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Fd</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Low level I/O operations.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd_ref</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> Stdio.Fd.<b><span class='variable'>_fd</span></b></code></p></dd>
+
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Read only</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>fd_factory</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> <b><span class='method'>fd_factory</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Factory creating <code>Stdio.Fd</code> objects.</p>
+
<p> This function is called by <code>openat()</code>, <code>pipe()</code>, <code>dup()</code>
+
and other functions creating new file objects.</p>
+
<p> The default implementation calls <code class='expr'>object_program(this_object())()</code>
+
to create the new object, and returns the <code>Fd</code> inherit in it.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Note that this function must return the <code>Fd</code> inherit in the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.Port()->fd_factory()</code>, <code>openat()</code>, <code>pipe()</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Fd_ref</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Proxy class that contains stub functions
+
that call the corresponding functions in
+
<code>Fd</code>.</p>
+
<p> Used by <code>Stdio.File</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> Stdio.Fd_ref.<b><span class='variable'>_fd</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Object to which called functions are relayed.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Fd</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit Fd</span> : <span class='inherit'>Fd</span></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Fake inherit to propagate the documentation
+
from <code>_Stdio.Fd</code>.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.NonblockingStream</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The Stdio.NonblockingStream API.</p>
+
<p> This class exists purely for typing reasons.</p>
+
<p> Use in types in place of <code>Stdio.File</code> where nonblocking and/or blocking
+
stream-oriented I/O is done with the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stream</code>, <code>BlockFile</code>, <code>File</code>, <code>FILE</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Stream</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit Stream</span> : <span class='inherit'>Stream</span></code></p></dd>
+
</dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Stat</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This object is used to represent file status information
+
from e.g. <code>file_stat()</code>.</p>
+
<p> It contains the following items usually found in a C <tt>struct
+
stat</tt>:</p>
+
<dl class='group--doc'><dt>mode</dt>
+
<dd><p>File mode (see <tt>mknod(2)</tt>).</p>
+
</dd>
+
<dt>size</dt>
+
<dd><p>File size in bytes.</p>
+
</dd>
+
<dt>uid</dt>
+
<dd><p>User ID of the file's owner.</p>
+
</dd>
+
<dt>gid</dt>
+
<dd><p>Group ID of the file's owner.</p>
+
</dd>
+
<dt>atime</dt>
+
<dd><p>Time of last access in seconds since 00:00:00 UTC, 1970-01-01.</p>
+
</dd>
+
<dt>mtime</dt>
+
<dd><p>Time of last data modification.</p>
+
</dd>
+
<dt>ctime</dt>
+
<dd><p>Time of last file status change.</p>
+
</dd>
+
<dt>ino</dt>
+
<dd><p>Inode number.</p>
+
</dd>
+
<dt>nlink</dt>
+
<dd><p>Number of links.</p>
+
</dd>
+
<dt>dev</dt>
+
<dd><p>ID of the device containing a directory entry for this file.</p>
+
</dd>
+
<dt>rdev</dt>
+
<dd><p>ID of the device.</p>
+
</dd>
+
</dl><p>It also contains some items that correspond to the C <tt>IS*</tt> macros:</p>
+
<dl class='group--doc'><dt>isreg</dt>
+
<dd><p>Set if the file is a regular file.</p>
+
</dd>
+
<dt>isdir</dt>
+
<dd><p>Set if the file is a directory.</p>
+
</dd>
+
<dt>islnk</dt>
+
<dd><p>Set if the file is a symbolic link. Note that symbolic links
+
are normally followed by the stat functions, so this might
+
only be set if you turn that off, e.g. by giving a nonzero
+
second argument to <code>file_stat()</code>.</p>
+
</dd>
+
<dt>isfifo</dt>
+
<dd><p>Set if the file is a FIFO (aka named pipe).</p>
+
</dd>
+
<dt>issock</dt>
+
<dd><p>Set if the file is a socket.</p>
+
</dd>
+
<dt>ischr</dt>
+
<dd><p>Set if the file is a character device.</p>
+
</dd>
+
<dt>isblk</dt>
+
<dd><p>Set if the file is a block device.</p>
+
</dd>
+
</dl><p>There are also some items that provide alternative representations
+
of the above:</p>
+
<dl class='group--doc'><dt>type</dt>
+
<dd><p>The type as a string, can be any of <code class='expr'>"reg"</code>,
+
<code class='expr'>"dir"</code>, <code class='expr'>"lnk"</code>, <code class='expr'>"fifo"</code>, <code class='expr'>"sock"</code>,
+
<code class='expr'>"chr"</code>, <code class='expr'>"blk"</code>, and <code class='expr'>"unknown"</code>.</p>
+
</dd>
+
<dt>mode_string</dt>
+
<dd><p>The file mode encoded as a string in <tt>ls -l</tt> style, e.g.
+
<code class='expr'>"drwxr-xr-x"</code>.</p>
+
</dd>
+
</dl><p>Note that some items might not exist or have meaningful values
+
on some platforms.</p>
+
<p> Additionally, the object may be initialized from or casted to an
+
<code class='expr'>array</code> on the form of a 'traditional' LPC stat-array, and
+
it's also possible to index the object directly with integers as
+
if it were such an array. The stat-array has this format:</p>
+
<table class='box'><tr><td colspan='2'>Array</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>0</code></code></td><td><p>File mode, same as <tt>mode</tt>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>1</code></code></td><td><p>If zero or greater, the file is a regular file and this is
+
its size in bytes. If less than zero it gives the type:
+
-2=directory, -3=symlink and -4=device.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>2</code></code></td><td><p>Time of last access, same as <tt>atime</tt>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>3</code></code></td><td><p>Time of last data modification, same as <tt>mtime</tt>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>4</code></code></td><td><p>Time of last file status change, same as <tt>ctime</tt>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>5</code></code></td><td><p>User ID of the file's owner, same as <tt>uid</tt>.</p>
+
</td></tr>
+
<tr><td><code><code class='datatype'>int</code> <code class='key'>6</code></code></td><td><p>Group ID of the file's owner, same as <tt>gid</tt>.</p>
+
</td></tr>
+
</table><p>It's possible to modify the stat struct by assigning values to
+
the items. They essentially work as variables, although some of
+
them affect others, e.g. setting <code class='expr'>isdir</code> clears <code class='expr'>isreg</code>
+
and setting <code class='expr'>mode_string</code> changes many of the other items.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.Stat</span> <span class='class'>Stdio.Stat</span><b>(</b><code class='datatype'>void</code>|<code class='datatype'>object</code>|<code class='datatype'>array</code> <code class='argument'>stat</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>A new <code>Stdio.Stat</code> object can be initialized in two ways:</p>
+
<ul>
+
<li><p><code>stat</code> is an object, typically another <code>Stdio.Stat</code>. The
+
stat info is copied from the object by getting the values of
+
<code class='expr'>mode</code>, <code class='expr'>size</code>, <code class='expr'>atime</code>, <code class='expr'>mtime</code>,
+
<code class='expr'>ctime</code>, <code class='expr'>uid</code>, <code class='expr'>gid</code>, <code class='expr'>dev</code>, <code class='expr'>ino</code>,
+
<code class='expr'>nlink</code>, and <code class='expr'>rdev</code>.</p>
+
</li><li><p><code>stat</code> is a seven element array on the 'traditional' LPC
+
stat-array form (see the class doc).</p>
+
</li></ul></dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.Stream</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The Stdio.Stream API.</p>
+
<p> This class exists purely for typing reasons.</p>
+
<p> Use in types in place of <code>Stdio.File</code> where only blocking stream-oriented
+
I/O is done with the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>NonblockingStream</code>, <code>BlockFile</code>, <code>File</code>, <code>FILE</code></p>
+
</dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Stdio.sendfile</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Send <code class='expr'>headers + from_fd[off..off+len-1] + trailers</code> to
+
<code class='expr'>to_fd</code> asyncronously.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is the low-level implementation, which has several limitations.
+
You probably want to use <code>Stdio.sendfile()</code> instead.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.sendfile()</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>Stdio.sendfile</span> <span class='class'>Stdio.sendfile</span><b>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>headers</code>, <code class='datatype'>object</code> <code class='argument'>from</code>, <code class='datatype'>int</code> <code class='argument'>offset</code>, <code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>trailers</code>, <code class='datatype'>object</code> <code class='argument'>to</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>callback</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Low-level implementation of <code>Stdio.sendfile()</code>.</p>
+
<p> Sends <code>headers</code> followed by <code>len</code> bytes starting at <code>offset</code>
+
from the file <code>from</code> followed by <code>trailers</code> to the file <code>to</code>.
+
When completed <code>callback</code> will be called with the total number of
+
bytes sent as the first argument, followed by <code>args</code>.</p>
+
<p> Any of <code>headers</code>, <code>from</code> and <code>trailers</code> may be left out
+
by setting them to <code class='expr'>0</code>.</p>
+
<p> Setting <code>offset</code> to <code class='expr'>-1</code> means send from the current position in
+
<code>from</code>.</p>
+
<p> Setting <code>len</code> to <code class='expr'>-1</code> means send until <code>from</code>'s end of file is
+
reached.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Don't use this class directly! Use <code>Stdio.sendfile()</code> instead.</p>
+
<p> In Pike 7.7 and later the <code>callback</code> function will be called
+
from the backend associated with <code>to</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.sendfile()</code></p>
+
</dd></dl>
+
</dd></dl></dd></dl></dd></dl></body></html>