perlapio.html
来自「perl教程」· HTML 代码 · 共 663 行 · 第 1/3 页
HTML
663 行
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>perlapio - perl's IO abstraction interface.</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',2);</script>
<h1><a>perlapio - perl's IO abstraction interface.</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#coexistence_with_stdio">Co-existence with stdio</a></li>
<li><a href="#fast_gets_functions">"Fast gets" Functions</a></li>
<li><a href="#other_functions">Other Functions</a></li>
</ul>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>perlapio - perl's IO abstraction interface.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
<span class="comment">#define PERLIO_NOT_STDIO 0 /* For co-existence with stdio only */</span>
<span class="comment">#include <perlio.h> /* Usually via #include <perl.h> */</span>
</pre>
<pre>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_stdin</span><span class="operator">(</span><span class="variable">void</span><span class="operator">);</span>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_stdout</span><span class="operator">(</span><span class="variable">void</span><span class="operator">);</span>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_stderr</span><span class="operator">(</span><span class="variable">void</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_open</span><span class="operator">(</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*path</span><span class="operator">,</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*mode</span><span class="operator">);</span>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_fdopen</span><span class="operator">(</span><span class="keyword">int</span> <span class="variable">fd</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*mode</span><span class="operator">);</span>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_reopen</span><span class="operator">(</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*path</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*mode</span><span class="operator">,</span> <span class="variable">PerlIO</span> <span class="variable">*old</span><span class="operator">);</span> <span class="regex">/* deprecated */</span>
<span class="keyword">int</span> <span class="variable">PerlIO_close</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_stdoutf</span><span class="operator">(</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*fmt</span><span class="operator">,...)</span>
<span class="keyword">int</span> <span class="variable">PerlIO_puts</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*string</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_putc</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span><span class="keyword">int</span> <span class="variable">ch</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_write</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span><span class="variable">const</span> <span class="variable">void</span> <span class="variable">*buf</span><span class="operator">,</span><span class="variable">size_t</span> <span class="variable">numbytes</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_printf</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*fmt</span><span class="operator">,...);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_vprintf</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*fmt</span><span class="operator">,</span> <span class="variable">va_list</span> <span class="variable">args</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_flush</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_eof</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_error</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="variable">void</span> <span class="variable">PerlIO_clearerr</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_getc</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*d</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_ungetc</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span><span class="keyword">int</span> <span class="variable">ch</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_read</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">void</span> <span class="variable">*buf</span><span class="operator">,</span> <span class="variable">size_t</span> <span class="variable">numbytes</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_fileno</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">void</span> <span class="variable">PerlIO_setlinebuf</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">Off_t</span> <span class="variable">PerlIO_tell</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_seek</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">Off_t</span> <span class="variable">offset</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">whence</span><span class="operator">);</span>
<span class="variable">void</span> <span class="variable">PerlIO_rewind</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_getpos</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">SV</span> <span class="variable">*save</span><span class="operator">);</span> <span class="regex">/* prototype changed */</span>
<span class="keyword">int</span> <span class="variable">PerlIO_setpos</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">SV</span> <span class="variable">*saved</span><span class="operator">);</span> <span class="regex">/* prototype changed */</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_fast_gets</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_has_cntptr</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_get_cnt</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="variable">char</span> <span class="variable">*PerlIO_get_ptr</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="variable">void</span> <span class="variable">PerlIO_set_ptrcnt</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">char</span> <span class="variable">*ptr</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">count</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_canset_cnt</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span> <span class="regex">/* deprecated */</span>
<span class="variable">void</span> <span class="variable">PerlIO_set_cnt</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">count</span><span class="operator">);</span> <span class="regex">/* deprecated */</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_has_base</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="variable">char</span> <span class="variable">*PerlIO_get_base</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_get_bufsiz</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">PerlIO</span> <span class="variable">*PerlIO_importFILE</span><span class="operator">(</span><span class="variable">FILE</span> <span class="variable">*stdio</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*mode</span><span class="operator">);</span>
<span class="variable">FILE</span> <span class="variable">*PerlIO_exportFILE</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">flags</span><span class="operator">);</span>
<span class="variable">FILE</span> <span class="variable">*PerlIO_findFILE</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">);</span>
<span class="variable">void</span> <span class="variable">PerlIO_releaseFILE</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span><span class="variable">FILE</span> <span class="variable">*stdio</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">int</span> <span class="variable">PerlIO_apply_layers</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*mode</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*layers</span><span class="operator">);</span>
<span class="keyword">int</span> <span class="variable">PerlIO_binmode</span><span class="operator">(</span><span class="variable">PerlIO</span> <span class="variable">*f</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">ptype</span><span class="operator">,</span> <span class="keyword">int</span> <span class="variable">imode</span><span class="operator">,</span> <span class="variable">const</span> <span class="variable">char</span> <span class="variable">*layers</span><span class="operator">);</span>
<span class="variable">void</span> <span class="variable">PerlIO_debug</span><span class="operator">(</span><span class="variable">const</span> <span class="variable">char</span> <span class="variable">*fmt</span><span class="operator">,...)</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>Perl's source code, and extensions that want maximum portability,
should use the above functions instead of those defined in ANSI C's
<em>stdio.h</em>. The perl headers (in particular "perlio.h") will
<code>#define</code> them to the I/O mechanism selected at Configure time.</p>
<p>The functions are modeled on those in <em>stdio.h</em>, but parameter order
has been "tidied up a little".</p>
<p><code>PerlIO *</code> takes the place of FILE *. Like FILE * it should be
treated as opaque (it is probably safe to assume it is a pointer to
something).</p>
<p>There are currently three implementations:</p>
<ol>
<li><strong><a name="item_use_stdio">USE_STDIO</a></strong>
<p>All above are #define'd to stdio functions or are trivial wrapper
functions which call stdio. In this case <em>only</em> PerlIO * is a FILE *.
This has been the default implementation since the abstraction was
introduced in perl5.003_02.</p>
</li>
<li><strong><a name="item_use_sfio">USE_SFIO</a></strong>
<p>A "legacy" implementation in terms of the "sfio" library. Used for
some specialist applications on Unix machines ("sfio" is not widely
ported away from Unix). Most of above are #define'd to the sfio
functions. PerlIO * is in this case Sfio_t *.</p>
</li>
<li><strong><a name="item_use_perlio">USE_PERLIO</a></strong>
<p>Introduced just after perl5.7.0, this is a re-implementation of the
above abstraction which allows perl more control over how IO is done
as it decouples IO from the way the operating system and C library
choose to do things. For USE_PERLIO PerlIO * has an extra layer of
indirection - it is a pointer-to-a-pointer. This allows the PerlIO *
to remain with a known value while swapping the implementation around
underneath <em>at run time</em>. In this case all the above are true (but
very simple) functions which call the underlying implementation.</p>
<p>This is the only implementation for which <a href="#item_perlio_apply_layers"><code>PerlIO_apply_layers()</code></a>
does anything "interesting".</p>
<p>The USE_PERLIO implementation is described in <a href="../../lib/Pod/perliol.html">the perliol manpage</a>.</p>
</li>
</ol>
<p>Because "perlio.h" is a thin layer (for efficiency) the semantics of
these functions are somewhat dependent on the underlying implementation.
Where these variations are understood they are noted below.</p>
<p>Unless otherwise noted, functions return 0 on success, or a negative
value (usually <code>EOF</code> which is usually -1) and set <code>errno</code> on error.</p>
<dl>
<dt><strong><a name="item_perlio_stdin"><strong>PerlIO_stdin()</strong>, <strong>PerlIO_stdout()</strong>, <strong>PerlIO_stderr()</strong></a></strong>
<dd>
<p>Use these rather than <code>stdin</code>, <code>stdout</code>, <code>stderr</code>. They are written
to look like "function calls" rather than variables because this makes
it easier to <em>make them</em> function calls if platform cannot export data
to loaded modules, or if (say) different "threads" might have different
values.</p>
</dd>
</li>
<dt><strong><a name="item_perlio_open"><strong>PerlIO_open(path, mode)</strong>, <strong>PerlIO_fdopen(fd,mode)</strong></a></strong>
<dd>
<p>These correspond to <code>fopen()/fdopen()</code> and the arguments are the same.
Return <code>NULL</code> and set <code>errno</code> if there is an error. There may be an
implementation limit on the number of open handles, which may be lower
than the limit on the number of open files - <code>errno</code> may not be set
when <code>NULL</code> is returned if this limit is exceeded.</p>
</dd>
</li>
<dt><strong><a name="item_perlio_reopen"><strong>PerlIO_reopen(path,mode,f)</strong></a></strong>
<dd>
<p>While this currently exists in all three implementations perl itself
does not use it. <em>As perl does not use it, it is not well tested.</em></p>
</dd>
<dd>
<p>Perl prefers to <code>dup</code> the new low-level descriptor to the descriptor
used by the existing PerlIO. This may become the behaviour of this
function in the future.</p>
</dd>
</li>
<dt><strong><a name="item_perlio_printf"><strong>PerlIO_printf(f,fmt,...)</strong>, <strong>PerlIO_vprintf(f,fmt,a)</strong></a></strong>
<dd>
<p>These are <code>fprintf()/vfprintf()</code> equivalents.</p>
</dd>
</li>
<dt><strong><a name="item_perlio_stdoutf"><strong>PerlIO_stdoutf(fmt,...)</strong></a></strong>
<dd>
<p>This is <a href="../../lib/Pod/perlfunc.html#item_printf"><code>printf()</code></a> equivalent. printf is #defined to this function,
so it is (currently) legal to use <a href="../../lib/Pod/perlfunc.html#item_printf"><code>printf(fmt,...)</code></a> in perl sources.</p>
</dd>
</li>
<dt><strong><a name="item_perlio_read"><strong>PerlIO_read(f,buf,count)</strong>, <strong>PerlIO_write(f,buf,count)</strong></a></strong>
<dd>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?