home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _1e8629d9fff1f8c53b10f21b7f4743fc < prev    next >
Text File  |  2000-03-23  |  13KB  |  303 lines

  1. <HTML>
  2. <HEAD>
  3. <TITLE>perlapio - perl's IO abstraction interface.</TITLE>
  4. <LINK REL="stylesheet" HREF="../../Active.css" TYPE="text/css">
  5. <LINK REV="made" HREF="mailto:">
  6. </HEAD>
  7.  
  8. <BODY>
  9. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  10. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  11. <STRONG><P CLASS=block> perlapio - perl's IO abstraction interface.</P></STRONG>
  12. </TD></TR>
  13. </TABLE>
  14.  
  15. <A NAME="__index__"></A>
  16. <!-- INDEX BEGIN -->
  17.  
  18. <UL>
  19.  
  20.     <LI><A HREF="#name">NAME</A></LI>
  21.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  22.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  23.     <UL>
  24.  
  25.         <LI><A HREF="#coexistence with stdio">Co-existence with stdio</A></LI>
  26.     </UL>
  27.  
  28. </UL>
  29. <!-- INDEX END -->
  30.  
  31. <HR>
  32. <P>
  33. <H1><A NAME="name">NAME</A></H1>
  34. <P>perlapio - perl's IO abstraction interface.</P>
  35. <P>
  36. <HR>
  37. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  38. <PRE>
  39.     PerlIO *PerlIO_stdin(void);
  40.     PerlIO *PerlIO_stdout(void);
  41.     PerlIO *PerlIO_stderr(void);</PRE>
  42. <PRE>
  43.     PerlIO *PerlIO_open(const char *,const char *);
  44.     int     PerlIO_close(PerlIO *);</PRE>
  45. <PRE>
  46.     int     PerlIO_stdoutf(const char *,...)
  47.     int     PerlIO_puts(PerlIO *,const char *);
  48.     int     PerlIO_putc(PerlIO *,int);
  49.     int     PerlIO_write(PerlIO *,const void *,size_t);
  50.     int     PerlIO_printf(PerlIO *, const char *,...);
  51.     int     PerlIO_vprintf(PerlIO *, const char *, va_list);
  52.     int     PerlIO_flush(PerlIO *);</PRE>
  53. <PRE>
  54.     int     PerlIO_eof(PerlIO *);
  55.     int     PerlIO_error(PerlIO *);
  56.     void    PerlIO_clearerr(PerlIO *);</PRE>
  57. <PRE>
  58.     int     PerlIO_getc(PerlIO *);
  59.     int     PerlIO_ungetc(PerlIO *,int);
  60.     int     PerlIO_read(PerlIO *,void *,size_t);</PRE>
  61. <PRE>
  62.     int     PerlIO_fileno(PerlIO *);
  63.     PerlIO *PerlIO_fdopen(int, const char *);
  64.     PerlIO *PerlIO_importFILE(FILE *, int flags);
  65.     FILE   *PerlIO_exportFILE(PerlIO *, int flags);
  66.     FILE   *PerlIO_findFILE(PerlIO *);
  67.     void    PerlIO_releaseFILE(PerlIO *,FILE *);</PRE>
  68. <PRE>
  69.     void    PerlIO_setlinebuf(PerlIO *);</PRE>
  70. <PRE>
  71.     long    PerlIO_tell(PerlIO *);
  72.     int     PerlIO_seek(PerlIO *,off_t,int);
  73.     int     PerlIO_getpos(PerlIO *,Fpos_t *)
  74.     int     PerlIO_setpos(PerlIO *,Fpos_t *)
  75.     void    PerlIO_rewind(PerlIO *);</PRE>
  76. <PRE>
  77.     int     PerlIO_has_base(PerlIO *);
  78.     int     PerlIO_has_cntptr(PerlIO *);
  79.     int     PerlIO_fast_gets(PerlIO *);
  80.     int     PerlIO_canset_cnt(PerlIO *);</PRE>
  81. <PRE>
  82.     char   *PerlIO_get_ptr(PerlIO *);
  83.     int     PerlIO_get_cnt(PerlIO *);
  84.     void    PerlIO_set_cnt(PerlIO *,int);
  85.     void    PerlIO_set_ptrcnt(PerlIO *,char *,int);
  86.     char   *PerlIO_get_base(PerlIO *);
  87.     int     PerlIO_get_bufsiz(PerlIO *);</PRE>
  88. <P>
  89. <HR>
  90. <H1><A NAME="description">DESCRIPTION</A></H1>
  91. <P>Perl's source code should use the above functions instead of those
  92. defined in ANSI C's <EM>stdio.h</EM>.  The perl headers will <CODE>#define</CODE> them to
  93. the I/O mechanism selected at Configure time.</P>
  94. <P>The functions are modeled on those in <EM>stdio.h</EM>, but parameter order
  95. has been ``tidied up a little''.</P>
  96. <DL>
  97. <DT><STRONG><A NAME="item_PerlIO_%2A"><STRONG>PerlIO *</STRONG></A></STRONG><BR>
  98. <DD>
  99. This takes the place of FILE *. Like FILE * it should be treated as
  100. opaque (it is probably safe to assume it is a pointer to something).
  101. <P></P>
  102. <DT><STRONG><A NAME="item_PerlIO_stdin"><STRONG>PerlIO_stdin()</STRONG>, <STRONG>PerlIO_stdout()</STRONG>, <STRONG>PerlIO_stderr()</STRONG></A></STRONG><BR>
  103. <DD>
  104. Use these rather than <CODE>stdin</CODE>, <CODE>stdout</CODE>, <CODE>stderr</CODE>. They are written
  105. to look like ``function calls'' rather than variables because this makes
  106. it easier to <EM>make them</EM> function calls if platform cannot export data
  107. to loaded modules, or if (say) different ``threads'' might have different
  108. values.
  109. <P></P>
  110. <DT><STRONG><A NAME="item_PerlIO_open"><STRONG>PerlIO_open(path, mode)</STRONG>, <STRONG>PerlIO_fdopen(fd,mode)</STRONG></A></STRONG><BR>
  111. <DD>
  112. These correspond to <CODE>fopen()/fdopen()</CODE> arguments are the same.
  113. <P></P>
  114. <DT><STRONG><A NAME="item_PerlIO_printf"><STRONG>PerlIO_printf(f,fmt,...)</STRONG>, <STRONG>PerlIO_vprintf(f,fmt,a)</STRONG></A></STRONG><BR>
  115. <DD>
  116. These are <CODE>fprintf()/vfprintf()</CODE> equivalents.
  117. <P></P>
  118. <DT><STRONG><A NAME="item_PerlIO_stdoutf"><STRONG>PerlIO_stdoutf(fmt,...)</STRONG></A></STRONG><BR>
  119. <DD>
  120. This is <A HREF="../../lib/Pod/perlfunc.html#item_printf"><CODE>printf()</CODE></A> equivalent. printf is #defined to this function,
  121. so it is (currently) legal to use <A HREF="../../lib/Pod/perlfunc.html#item_printf"><CODE>printf(fmt,...)</CODE></A> in perl sources.
  122. <P></P>
  123. <DT><STRONG><A NAME="item_PerlIO_read"><STRONG>PerlIO_read(f,buf,count)</STRONG>, <STRONG>PerlIO_write(f,buf,count)</STRONG></A></STRONG><BR>
  124. <DD>
  125. These correspond to <CODE>fread()</CODE> and fwrite(). Note that arguments
  126. are different, there is only one ``count'' and order has
  127. ``file'' first.
  128. <P></P>
  129. <DT><STRONG><A NAME="item_PerlIO_close"><STRONG>PerlIO_close(f)</STRONG></A></STRONG><BR>
  130. <DD>
  131. <DT><STRONG><A NAME="item_PerlIO_puts"><STRONG>PerlIO_puts(f,s)</STRONG>, <STRONG>PerlIO_putc(f,c)</STRONG></A></STRONG><BR>
  132. <DD>
  133. These correspond to <CODE>fputs()</CODE> and fputc().
  134. Note that arguments have been revised to have ``file'' first.
  135. <P></P>
  136. <DT><STRONG><A NAME="item_PerlIO_ungetc"><STRONG>PerlIO_ungetc(f,c)</STRONG></A></STRONG><BR>
  137. <DD>
  138. This corresponds to ungetc().
  139. Note that arguments have been revised to have ``file'' first.
  140. <P></P>
  141. <DT><STRONG><A NAME="item_PerlIO_getc"><STRONG>PerlIO_getc(f)</STRONG></A></STRONG><BR>
  142. <DD>
  143. This corresponds to getc().
  144. <P></P>
  145. <DT><STRONG><A NAME="item_PerlIO_eof"><STRONG>PerlIO_eof(f)</STRONG></A></STRONG><BR>
  146. <DD>
  147. This corresponds to feof().
  148. <P></P>
  149. <DT><STRONG><A NAME="item_PerlIO_error"><STRONG>PerlIO_error(f)</STRONG></A></STRONG><BR>
  150. <DD>
  151. This corresponds to ferror().
  152. <P></P>
  153. <DT><STRONG><A NAME="item_PerlIO_fileno"><STRONG>PerlIO_fileno(f)</STRONG></A></STRONG><BR>
  154. <DD>
  155. This corresponds to fileno(), note that on some platforms,
  156. the meaning of ``fileno'' may not match Unix.
  157. <P></P>
  158. <DT><STRONG><A NAME="item_PerlIO_clearerr"><STRONG>PerlIO_clearerr(f)</STRONG></A></STRONG><BR>
  159. <DD>
  160. This corresponds to clearerr(), i.e., clears 'eof' and 'error'
  161. flags for the ``stream''.
  162. <P></P>
  163. <DT><STRONG><A NAME="item_PerlIO_flush"><STRONG>PerlIO_flush(f)</STRONG></A></STRONG><BR>
  164. <DD>
  165. This corresponds to fflush().
  166. <P></P>
  167. <DT><STRONG><A NAME="item_PerlIO_tell"><STRONG>PerlIO_tell(f)</STRONG></A></STRONG><BR>
  168. <DD>
  169. This corresponds to ftell().
  170. <P></P>
  171. <DT><STRONG><A NAME="item_PerlIO_seek"><STRONG>PerlIO_seek(f,o,w)</STRONG></A></STRONG><BR>
  172. <DD>
  173. This corresponds to fseek().
  174. <P></P>
  175. <DT><STRONG><A NAME="item_PerlIO_getpos"><STRONG>PerlIO_getpos(f,p)</STRONG>, <STRONG>PerlIO_setpos(f,p)</STRONG></A></STRONG><BR>
  176. <DD>
  177. These correspond to <CODE>fgetpos()</CODE> and fsetpos(). If platform does not
  178. have the stdio calls then they are implemented in terms of <A HREF="#item_PerlIO_tell"><CODE>PerlIO_tell()</CODE></A>
  179. and PerlIO_seek().
  180. <P></P>
  181. <DT><STRONG><A NAME="item_PerlIO_rewind"><STRONG>PerlIO_rewind(f)</STRONG></A></STRONG><BR>
  182. <DD>
  183. This corresponds to rewind(). Note may be redefined
  184. in terms of <A HREF="#item_PerlIO_seek"><CODE>PerlIO_seek()</CODE></A> at some point.
  185. <P></P>
  186. <DT><STRONG><A NAME="item_PerlIO_tmpfile"><STRONG>PerlIO_tmpfile()</STRONG></A></STRONG><BR>
  187. <DD>
  188. This corresponds to tmpfile(), i.e., returns an anonymous
  189. PerlIO which will automatically be deleted when closed.
  190. <P></P></DL>
  191. <P>
  192. <H2><A NAME="coexistence with stdio">Co-existence with stdio</A></H2>
  193. <P>There is outline support for co-existence of PerlIO with stdio.
  194. Obviously if PerlIO is implemented in terms of stdio there is
  195. no problem. However if perlio is implemented on top of (say) sfio
  196. then mechanisms must exist to create a FILE * which can be passed
  197. to library code which is going to use stdio calls.</P>
  198. <DL>
  199. <DT><STRONG><A NAME="item_PerlIO_importFILE"><STRONG>PerlIO_importFILE(f,flags)</STRONG></A></STRONG><BR>
  200. <DD>
  201. Used to get a PerlIO * from a FILE *.
  202. May need additional arguments, interface under review.
  203. <P></P>
  204. <DT><STRONG><A NAME="item_PerlIO_exportFILE"><STRONG>PerlIO_exportFILE(f,flags)</STRONG></A></STRONG><BR>
  205. <DD>
  206. Given an PerlIO * return a 'native' FILE * suitable for
  207. passing to code expecting to be compiled and linked with
  208. ANSI C <EM>stdio.h</EM>.
  209. <P>The fact that such a FILE * has been 'exported' is recorded,
  210. and may affect future PerlIO operations on the original
  211. PerlIO *.</P>
  212. <P></P>
  213. <DT><STRONG><A NAME="item_PerlIO_findFILE"><STRONG>PerlIO_findFILE(f)</STRONG></A></STRONG><BR>
  214. <DD>
  215. Returns previously 'exported' FILE * (if any).
  216. Place holder until interface is fully defined.
  217. <P></P>
  218. <DT><STRONG><A NAME="item_PerlIO_releaseFILE"><STRONG>PerlIO_releaseFILE(p,f)</STRONG></A></STRONG><BR>
  219. <DD>
  220. Calling PerlIO_releaseFILE informs PerlIO that all use
  221. of FILE * is complete. It is removed from list of 'exported'
  222. FILE *s, and associated PerlIO * should revert to original
  223. behaviour.
  224. <P></P>
  225. <DT><STRONG><A NAME="item_PerlIO_setlinebuf"><STRONG>PerlIO_setlinebuf(f)</STRONG></A></STRONG><BR>
  226. <DD>
  227. This corresponds to setlinebuf(). Use is deprecated pending
  228. further discussion. (Perl core uses it <EM>only</EM> when ``dumping'';
  229. it has nothing to do with $| auto-flush.)
  230. <P></P></DL>
  231. <P>In addition to user API above there is an ``implementation'' interface
  232. which allows perl to get at internals of PerlIO.
  233. The following calls correspond to the various FILE_xxx macros determined
  234. by Configure. This section is really of interest to only those
  235. concerned with detailed perl-core behaviour or implementing a
  236. PerlIO mapping.</P>
  237. <DL>
  238. <DT><STRONG><A NAME="item_PerlIO_has_cntptr"><STRONG>PerlIO_has_cntptr(f)</STRONG></A></STRONG><BR>
  239. <DD>
  240. Implementation can return pointer to current position in the ``buffer'' and
  241. a count of bytes available in the buffer.
  242. <P></P>
  243. <DT><STRONG><A NAME="item_PerlIO_get_ptr"><STRONG>PerlIO_get_ptr(f)</STRONG></A></STRONG><BR>
  244. <DD>
  245. Return pointer to next readable byte in buffer.
  246. <P></P>
  247. <DT><STRONG><A NAME="item_PerlIO_get_cnt"><STRONG>PerlIO_get_cnt(f)</STRONG></A></STRONG><BR>
  248. <DD>
  249. Return count of readable bytes in the buffer.
  250. <P></P>
  251. <DT><STRONG><A NAME="item_PerlIO_canset_cnt"><STRONG>PerlIO_canset_cnt(f)</STRONG></A></STRONG><BR>
  252. <DD>
  253. Implementation can adjust its idea of number of
  254. bytes in the buffer.
  255. <P></P>
  256. <DT><STRONG><A NAME="item_PerlIO_fast_gets"><STRONG>PerlIO_fast_gets(f)</STRONG></A></STRONG><BR>
  257. <DD>
  258. Implementation has all the interfaces required to
  259. allow perl's fast code to handle <FILE> mechanism.
  260. <PRE>
  261.   PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
  262.                         PerlIO_canset_cnt(f) && \
  263.                         `Can set pointer into buffer'</PRE>
  264. <P></P>
  265. <DT><STRONG><A NAME="item_PerlIO_set_ptrcnt"><STRONG>PerlIO_set_ptrcnt(f,p,c)</STRONG></A></STRONG><BR>
  266. <DD>
  267. Set pointer into buffer, and a count of bytes still in the
  268. buffer. Should be used only to set
  269. pointer to within range implied by previous calls
  270. to <A HREF="#item_PerlIO_get_ptr"><CODE>PerlIO_get_ptr</CODE></A> and <A HREF="#item_PerlIO_get_cnt"><CODE>PerlIO_get_cnt</CODE></A>.
  271. <P></P>
  272. <DT><STRONG><A NAME="item_PerlIO_set_cnt"><STRONG>PerlIO_set_cnt(f,c)</STRONG></A></STRONG><BR>
  273. <DD>
  274. Obscure - set count of bytes in the buffer. Deprecated.
  275. Currently used in only doio.c to force count < -1 to -1.
  276. Perhaps should be PerlIO_set_empty or similar.
  277. This call may actually do nothing if ``count'' is deduced from pointer
  278. and a ``limit''.
  279. <P></P>
  280. <DT><STRONG><A NAME="item_PerlIO_has_base"><STRONG>PerlIO_has_base(f)</STRONG></A></STRONG><BR>
  281. <DD>
  282. Implementation has a buffer, and can return pointer
  283. to whole buffer and its size. Used by perl for <STRONG>-T</STRONG> / <STRONG>-B</STRONG> tests.
  284. Other uses would be very obscure...
  285. <P></P>
  286. <DT><STRONG><A NAME="item_PerlIO_get_base"><STRONG>PerlIO_get_base(f)</STRONG></A></STRONG><BR>
  287. <DD>
  288. Return <EM>start</EM> of buffer.
  289. <P></P>
  290. <DT><STRONG><A NAME="item_PerlIO_get_bufsiz"><STRONG>PerlIO_get_bufsiz(f)</STRONG></A></STRONG><BR>
  291. <DD>
  292. Return <EM>total size</EM> of buffer.
  293. <P></P></DL>
  294. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  295. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  296. <STRONG><P CLASS=block> perlapio - perl's IO abstraction interface.</P></STRONG>
  297. </TD></TR>
  298. </TABLE>
  299.  
  300. </BODY>
  301.  
  302. </HTML>
  303.