This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #133706) remove exploit code from Storable
[perl5.git] / pod / perlapio.pod
CommitLineData
760ac839
LW
1=head1 NAME
2
28757baa 3perlapio - perl's IO abstraction interface.
760ac839
LW
4
5=head1 SYNOPSIS
6
f185f654
KW
7 #define PERLIO_NOT_STDIO 0 /* For co-existence with stdio only */
8 #include <perlio.h> /* Usually via #include <perl.h> */
9
10 PerlIO *PerlIO_stdin(void);
11 PerlIO *PerlIO_stdout(void);
12 PerlIO *PerlIO_stderr(void);
13
14 PerlIO *PerlIO_open(const char *path,const char *mode);
15 PerlIO *PerlIO_fdopen(int fd, const char *mode);
16 PerlIO *PerlIO_reopen(const char *path, /* deprecated */
17 const char *mode, PerlIO *old);
18 int PerlIO_close(PerlIO *f);
19
20 int PerlIO_stdoutf(const char *fmt,...)
21 int PerlIO_puts(PerlIO *f,const char *string);
22 int PerlIO_putc(PerlIO *f,int ch);
23 SSize_t PerlIO_write(PerlIO *f,const void *buf,size_t numbytes);
24 int PerlIO_printf(PerlIO *f, const char *fmt,...);
25 int PerlIO_vprintf(PerlIO *f, const char *fmt, va_list args);
26 int PerlIO_flush(PerlIO *f);
27
28 int PerlIO_eof(PerlIO *f);
29 int PerlIO_error(PerlIO *f);
30 void PerlIO_clearerr(PerlIO *f);
31
32 int PerlIO_getc(PerlIO *d);
33 int PerlIO_ungetc(PerlIO *f,int ch);
34 SSize_t PerlIO_read(PerlIO *f, void *buf, size_t numbytes);
35
36 int PerlIO_fileno(PerlIO *f);
37
38 void PerlIO_setlinebuf(PerlIO *f);
39
40 Off_t PerlIO_tell(PerlIO *f);
41 int PerlIO_seek(PerlIO *f, Off_t offset, int whence);
42 void PerlIO_rewind(PerlIO *f);
43
44 int PerlIO_getpos(PerlIO *f, SV *save); /* prototype changed */
45 int PerlIO_setpos(PerlIO *f, SV *saved); /* prototype changed */
46
47 int PerlIO_fast_gets(PerlIO *f);
48 int PerlIO_has_cntptr(PerlIO *f);
49 SSize_t PerlIO_get_cnt(PerlIO *f);
50 char *PerlIO_get_ptr(PerlIO *f);
51 void PerlIO_set_ptrcnt(PerlIO *f, char *ptr, SSize_t count);
52
53 int PerlIO_canset_cnt(PerlIO *f); /* deprecated */
54 void PerlIO_set_cnt(PerlIO *f, int count); /* deprecated */
55
56 int PerlIO_has_base(PerlIO *f);
57 char *PerlIO_get_base(PerlIO *f);
58 SSize_t PerlIO_get_bufsiz(PerlIO *f);
59
60 PerlIO *PerlIO_importFILE(FILE *stdio, const char *mode);
463029d7 61 FILE *PerlIO_exportFILE(PerlIO *f, const char *mode);
f185f654
KW
62 FILE *PerlIO_findFILE(PerlIO *f);
63 void PerlIO_releaseFILE(PerlIO *f,FILE *stdio);
64
65 int PerlIO_apply_layers(PerlIO *f, const char *mode,
66 const char *layers);
67 int PerlIO_binmode(PerlIO *f, int ptype, int imode,
68 const char *layers);
69 void PerlIO_debug(const char *fmt,...)
760ac839
LW
70
71=head1 DESCRIPTION
72
06936a3c
PN
73Perl's source code, and extensions that want maximum portability,
74should use the above functions instead of those defined in ANSI C's
75I<stdio.h>. The perl headers (in particular "perlio.h") will
76C<#define> them to the I/O mechanism selected at Configure time.
760ac839
LW
77
78The functions are modeled on those in I<stdio.h>, but parameter order
79has been "tidied up a little".
80
06936a3c
PN
81C<PerlIO *> takes the place of FILE *. Like FILE * it should be
82treated as opaque (it is probably safe to assume it is a pointer to
83something).
50b80e25 84
1549f383 85There are currently two implementations:
50b80e25 86
760ac839
LW
87=over 4
88
50b80e25 89=item 1. USE_STDIO
760ac839 90
06936a3c
PN
91All above are #define'd to stdio functions or are trivial wrapper
92functions which call stdio. In this case I<only> PerlIO * is a FILE *.
93This has been the default implementation since the abstraction was
94introduced in perl5.003_02.
50b80e25 95
97cb92d6 96=item 2. USE_PERLIO
50b80e25 97
06936a3c
PN
98Introduced just after perl5.7.0, this is a re-implementation of the
99above abstraction which allows perl more control over how IO is done
100as it decouples IO from the way the operating system and C library
101choose to do things. For USE_PERLIO PerlIO * has an extra layer of
102indirection - it is a pointer-to-a-pointer. This allows the PerlIO *
210b36aa 103to remain with a known value while swapping the implementation around
06936a3c
PN
104underneath I<at run time>. In this case all the above are true (but
105very simple) functions which call the underlying implementation.
50b80e25 106
06936a3c
PN
107This is the only implementation for which C<PerlIO_apply_layers()>
108does anything "interesting".
50b80e25
NIS
109
110The USE_PERLIO implementation is described in L<perliol>.
111
112=back
113
06936a3c 114Because "perlio.h" is a thin layer (for efficiency) the semantics of
39ac7f1b
LS
115these functions are somewhat dependent on the underlying implementation.
116Where these variations are understood they are noted below.
50b80e25 117
39ac7f1b
LS
118Unless otherwise noted, functions return 0 on success, or a negative
119value (usually C<EOF> which is usually -1) and set C<errno> on error.
50b80e25
NIS
120
121=over 4
760ac839
LW
122
123=item B<PerlIO_stdin()>, B<PerlIO_stdout()>, B<PerlIO_stderr()>
124
125Use these rather than C<stdin>, C<stdout>, C<stderr>. They are written
126to look like "function calls" rather than variables because this makes
54310121 127it easier to I<make them> function calls if platform cannot export data
128to loaded modules, or if (say) different "threads" might have different
760ac839
LW
129values.
130
131=item B<PerlIO_open(path, mode)>, B<PerlIO_fdopen(fd,mode)>
132
3039a93d 133These correspond to fopen()/fdopen() and the arguments are the same.
06936a3c
PN
134Return C<NULL> and set C<errno> if there is an error. There may be an
135implementation limit on the number of open handles, which may be lower
136than the limit on the number of open files - C<errno> may not be set
210b36aa 137when C<NULL> is returned if this limit is exceeded.
50b80e25 138
11e1c8f2 139=item B<PerlIO_reopen(path,mode,f)>
50b80e25 140
8cc92bd4 141While this currently exists in both implementations, perl itself
50b80e25
NIS
142does not use it. I<As perl does not use it, it is not well tested.>
143
06936a3c
PN
144Perl prefers to C<dup> the new low-level descriptor to the descriptor
145used by the existing PerlIO. This may become the behaviour of this
146function in the future.
760ac839
LW
147
148=item B<PerlIO_printf(f,fmt,...)>, B<PerlIO_vprintf(f,fmt,a)>
149
7b8d334a 150These are fprintf()/vfprintf() equivalents.
760ac839
LW
151
152=item B<PerlIO_stdoutf(fmt,...)>
153
154This is printf() equivalent. printf is #defined to this function,
84dc3c4d 155so it is (currently) legal to use C<printf(fmt,...)> in perl sources.
760ac839
LW
156
157=item B<PerlIO_read(f,buf,count)>, B<PerlIO_write(f,buf,count)>
158
2c2cb412
GA
159These correspond functionally to fread() and fwrite() but the
160arguments and return values are different. The PerlIO_read() and
161PerlIO_write() signatures have been modeled on the more sane low level
162read() and write() functions instead: The "file" argument is passed
163first, there is only one "count", and the return value can distinguish
164between error and C<EOF>.
165
166Returns a byte count if successful (which may be zero or
c0a503cc
JH
167positive), returns negative value and sets C<errno> on error.
168Depending on implementation C<errno> may be C<EINTR> if operation was
169interrupted by a signal.
760ac839
LW
170
171=item B<PerlIO_close(f)>
172
06936a3c
PN
173Depending on implementation C<errno> may be C<EINTR> if operation was
174interrupted by a signal.
50b80e25 175
21917246 176=item B<PerlIO_puts(f,s)>, B<PerlIO_putc(f,c)>
760ac839 177
54310121 178These correspond to fputs() and fputc().
760ac839
LW
179Note that arguments have been revised to have "file" first.
180
21917246 181=item B<PerlIO_ungetc(f,c)>
760ac839 182
06936a3c
PN
183This corresponds to ungetc(). Note that arguments have been revised
184to have "file" first. Arranges that next read operation will return
185the byte B<c>. Despite the implied "character" in the name only
186values in the range 0..0xFF are defined. Returns the byte B<c> on
187success or -1 (C<EOF>) on error. The number of bytes that can be
188"pushed back" may vary, only 1 character is certain, and then only if
189it is the last character that was read from the handle.
760ac839
LW
190
191=item B<PerlIO_getc(f)>
192
193This corresponds to getc().
50b80e25 194Despite the c in the name only byte range 0..0xFF is supported.
3039a93d 195Returns the character read or -1 (C<EOF>) on error.
760ac839
LW
196
197=item B<PerlIO_eof(f)>
198
06936a3c
PN
199This corresponds to feof(). Returns a true/false indication of
200whether the handle is at end of file. For terminal devices this may
201or may not be "sticky" depending on the implementation. The flag is
202cleared by PerlIO_seek(), or PerlIO_rewind().
760ac839
LW
203
204=item B<PerlIO_error(f)>
205
06936a3c
PN
206This corresponds to ferror(). Returns a true/false indication of
207whether there has been an IO error on the handle.
760ac839
LW
208
209=item B<PerlIO_fileno(f)>
210
06936a3c
PN
211This corresponds to fileno(), note that on some platforms, the meaning
212of "fileno" may not match Unix. Returns -1 if the handle has no open
213descriptor associated with it.
760ac839
LW
214
215=item B<PerlIO_clearerr(f)>
216
06936a3c
PN
217This corresponds to clearerr(), i.e., clears 'error' and (usually)
218'eof' flags for the "stream". Does not return a value.
760ac839
LW
219
220=item B<PerlIO_flush(f)>
221
06936a3c
PN
222This corresponds to fflush(). Sends any buffered write data to the
223underlying file. If called with C<NULL> this may flush all open
fa11829f 224streams (or core dump with some USE_STDIO implementations). Calling
c0a503cc
JH
225on a handle open for read only, or on which last operation was a read
226of some kind may lead to undefined behaviour on some USE_STDIO
227implementations. The USE_PERLIO (layers) implementation tries to
228behave better: it flushes all open streams when passed C<NULL>, and
229attempts to retain data on read streams either in the buffer or by
230seeking the handle to the current logical position.
760ac839 231
50b80e25 232=item B<PerlIO_seek(f,offset,whence)>
760ac839 233
06936a3c
PN
234This corresponds to fseek(). Sends buffered write data to the
235underlying file, or discards any buffered read data, then positions
d7f8936a 236the file descriptor as specified by B<offset> and B<whence> (sic).
06936a3c
PN
237This is the correct thing to do when switching between read and write
238on the same handle (see issues with PerlIO_flush() above). Offset is
239of type C<Off_t> which is a perl Configure value which may not be same
50b80e25 240as stdio's C<off_t>.
760ac839 241
50b80e25 242=item B<PerlIO_tell(f)>
760ac839 243
06936a3c
PN
244This corresponds to ftell(). Returns the current file position, or
245(Off_t) -1 on error. May just return value system "knows" without
246making a system call or checking the underlying file descriptor (so
247use on shared file descriptors is not safe without a
248PerlIO_seek()). Return value is of type C<Off_t> which is a perl
249Configure value which may not be same as stdio's C<off_t>.
760ac839
LW
250
251=item B<PerlIO_getpos(f,p)>, B<PerlIO_setpos(f,p)>
252
06936a3c
PN
253These correspond (loosely) to fgetpos() and fsetpos(). Rather than
254stdio's Fpos_t they expect a "Perl Scalar Value" to be passed. What is
255stored there should be considered opaque. The layout of the data may
256vary from handle to handle. When not using stdio or if platform does
257not have the stdio calls then they are implemented in terms of
258PerlIO_tell() and PerlIO_seek().
760ac839
LW
259
260=item B<PerlIO_rewind(f)>
261
50b80e25
NIS
262This corresponds to rewind(). It is usually defined as being
263
264 PerlIO_seek(f,(Off_t)0L, SEEK_SET);
265 PerlIO_clearerr(f);
266
760ac839
LW
267=item B<PerlIO_tmpfile()>
268
06936a3c
PN
269This corresponds to tmpfile(), i.e., returns an anonymous PerlIO or
270NULL on error. The system will attempt to automatically delete the
271file when closed. On Unix the file is usually C<unlink>-ed just after
272it is created so it does not matter how it gets closed. On other
273systems the file may only be deleted if closed via PerlIO_close()
274and/or the program exits via C<exit>. Depending on the implementation
275there may be "race conditions" which allow other processes access to
276the file, though in general it will be safer in this regard than
277ad. hoc. schemes.
50b80e25
NIS
278
279=item B<PerlIO_setlinebuf(f)>
280
06936a3c
PN
281This corresponds to setlinebuf(). Does not return a value. What
282constitutes a "line" is implementation dependent but usually means
283that writing "\n" flushes the buffer. What happens with things like
284"this\nthat" is uncertain. (Perl core uses it I<only> when "dumping";
285it has nothing to do with $| auto-flush.)
760ac839 286
54310121 287=back
760ac839 288
510d21e9 289=head2 Co-existence with stdio
760ac839 290
510d21e9 291There is outline support for co-existence of PerlIO with stdio.
06936a3c
PN
292Obviously if PerlIO is implemented in terms of stdio there is no
293problem. However in other cases then mechanisms must exist to create a
294FILE * which can be passed to library code which is going to use stdio
295calls.
50b80e25 296
210b36aa 297The first step is to add this line:
50b80e25
NIS
298
299 #define PERLIO_NOT_STDIO 0
300
06936a3c
PN
301I<before> including any perl header files. (This will probably become
302the default at some point). That prevents "perlio.h" from attempting
303to #define stdio functions onto PerlIO functions.
50b80e25 304
06936a3c
PN
305XS code is probably better using "typemap" if it expects FILE *
306arguments. The standard typemap will be adjusted to comprehend any
307changes in this area.
760ac839
LW
308
309=over 4
310
4b069b44 311=item B<PerlIO_importFILE(f,mode)>
760ac839 312
22569500 313Used to get a PerlIO * from a FILE *.
760ac839 314
c0a503cc
JH
315The mode argument should be a string as would be passed to
316fopen/PerlIO_open. If it is NULL then - for legacy support - the code
317will (depending upon the platform and the implementation) either
318attempt to empirically determine the mode in which I<f> is open, or
319use "r+" to indicate a read/write stream.
22569500
NIS
320
321Once called the FILE * should I<ONLY> be closed by calling
322C<PerlIO_close()> on the returned PerlIO *.
323
f504ae08
LC
324The PerlIO is set to textmode. Use PerlIO_binmode if this is
325not the desired mode.
326
b9d6bf13
JH
327This is B<not> the reverse of PerlIO_exportFILE().
328
4b069b44 329=item B<PerlIO_exportFILE(f,mode)>
760ac839 330
8dcb5783 331Given a PerlIO * create a 'native' FILE * suitable for passing to code
c0a503cc
JH
332expecting to be compiled and linked with ANSI C I<stdio.h>. The mode
333argument should be a string as would be passed to fopen/PerlIO_open.
334If it is NULL then - for legacy support - the FILE * is opened in same
335mode as the PerlIO *.
336
337The fact that such a FILE * has been 'exported' is recorded, (normally
338by pushing a new :stdio "layer" onto the PerlIO *), which may affect
339future PerlIO operations on the original PerlIO *. You should not
340call C<fclose()> on the file unless you call C<PerlIO_releaseFILE()>
341to disassociate it from the PerlIO *. (Do not use PerlIO_importFILE()
342for doing the disassociation.)
760ac839 343
22569500
NIS
344Calling this function repeatedly will create a FILE * on each call
345(and will push an :stdio layer each time as well).
760ac839
LW
346
347=item B<PerlIO_releaseFILE(p,f)>
348
06936a3c 349Calling PerlIO_releaseFILE informs PerlIO that all use of FILE * is
65dabbe3
LC
350complete. It is removed from the list of 'exported' FILE *s, and the
351associated PerlIO * should revert to its original behaviour.
760ac839 352
b9d6bf13
JH
353Use this to disassociate a file from a PerlIO * that was associated
354using PerlIO_exportFILE().
355
22569500
NIS
356=item B<PerlIO_findFILE(f)>
357
358Returns a native FILE * used by a stdio layer. If there is none, it
359will create one with PerlIO_exportFILE. In either case the FILE *
65dabbe3 360should be considered as belonging to PerlIO subsystem and should
22569500
NIS
361only be closed by calling C<PerlIO_close()>.
362
8dcb5783 363
760ac839
LW
364=back
365
50b80e25
NIS
366=head2 "Fast gets" Functions
367
06936a3c
PN
368In addition to standard-like API defined so far above there is an
369"implementation" interface which allows perl to get at internals of
370PerlIO. The following calls correspond to the various FILE_xxx macros
371determined by Configure - or their equivalent in other
372implementations. This section is really of interest to only those
373concerned with detailed perl-core behaviour, implementing a PerlIO
374mapping or writing code which can make use of the "read ahead" that
375has been done by the IO system in the same way perl does. Note that
376any code that uses these interfaces must be prepared to do things the
377traditional way if a handle does not support them.
760ac839
LW
378
379=over 4
380
50b80e25 381=item B<PerlIO_fast_gets(f)>
760ac839 382
50b80e25 383Returns true if implementation has all the interfaces required to
c0a503cc
JH
384allow perl's C<sv_gets> to "bypass" normal IO mechanism. This can
385vary from handle to handle.
760ac839 386
50b80e25
NIS
387 PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
388 PerlIO_canset_cnt(f) && \
ccf3535a 389 'Can set pointer into buffer'
760ac839 390
50b80e25 391=item B<PerlIO_has_cntptr(f)>
760ac839 392
06936a3c
PN
393Implementation can return pointer to current position in the "buffer"
394and a count of bytes available in the buffer. Do not use this - use
395PerlIO_fast_gets.
760ac839 396
50b80e25 397=item B<PerlIO_get_cnt(f)>
760ac839 398
06936a3c
PN
399Return count of readable bytes in the buffer. Zero or negative return
400means no more bytes available.
760ac839 401
50b80e25 402=item B<PerlIO_get_ptr(f)>
760ac839 403
06936a3c
PN
404Return pointer to next readable byte in buffer, accessing via the
405pointer (dereferencing) is only safe if PerlIO_get_cnt() has returned
406a positive value. Only positive offsets up to value returned by
407PerlIO_get_cnt() are allowed.
760ac839
LW
408
409=item B<PerlIO_set_ptrcnt(f,p,c)>
410
54310121 411Set pointer into buffer, and a count of bytes still in the
06936a3c
PN
412buffer. Should be used only to set pointer to within range implied by
413previous calls to C<PerlIO_get_ptr> and C<PerlIO_get_cnt>. The two
414values I<must> be consistent with each other (implementation may only
415use one or the other or may require both).
50b80e25
NIS
416
417=item B<PerlIO_canset_cnt(f)>
418
419Implementation can adjust its idea of number of bytes in the buffer.
420Do not use this - use PerlIO_fast_gets.
760ac839
LW
421
422=item B<PerlIO_set_cnt(f,c)>
423
06936a3c
PN
424Obscure - set count of bytes in the buffer. Deprecated. Only usable
425if PerlIO_canset_cnt() returns true. Currently used in only doio.c to
426force count less than -1 to -1. Perhaps should be PerlIO_set_empty or
427similar. This call may actually do nothing if "count" is deduced from
428pointer and a "limit". Do not use this - use PerlIO_set_ptrcnt().
760ac839
LW
429
430=item B<PerlIO_has_base(f)>
431
50b80e25 432Returns true if implementation has a buffer, and can return pointer
760ac839
LW
433to whole buffer and its size. Used by perl for B<-T> / B<-B> tests.
434Other uses would be very obscure...
435
436=item B<PerlIO_get_base(f)>
437
50b80e25
NIS
438Return I<start> of buffer. Access only positive offsets in the buffer
439up to the value returned by PerlIO_get_bufsiz().
760ac839
LW
440
441=item B<PerlIO_get_bufsiz(f)>
442
06936a3c
PN
443Return the I<total number of bytes> in the buffer, this is neither the
444number that can be read, nor the amount of memory allocated to the
445buffer. Rather it is what the operating system and/or implementation
446happened to C<read()> (or whatever) last time IO was requested.
50b80e25
NIS
447
448=back
449
450=head2 Other Functions
451
452=over 4
453
454=item PerlIO_apply_layers(f,mode,layers)
455
456The new interface to the USE_PERLIO implementation. The layers ":crlf"
457and ":raw" are only ones allowed for other implementations and those
c0a503cc
JH
458are silently ignored. (As of perl5.8 ":raw" is deprecated.) Use
459PerlIO_binmode() below for the portable case.
50b80e25
NIS
460
461=item PerlIO_binmode(f,ptype,imode,layers)
462
463The hook used by perl's C<binmode> operator.
210b36aa 464B<ptype> is perl's character for the kind of IO:
50b80e25
NIS
465
466=over 8
467
11e1c8f2 468=item 'E<lt>' read
50b80e25 469
11e1c8f2 470=item 'E<gt>' write
50b80e25
NIS
471
472=item '+' read/write
473
474=back
475
476B<imode> is C<O_BINARY> or C<O_TEXT>.
477
c0a503cc
JH
478B<layers> is a string of layers to apply, only ":crlf" makes sense in
479the non USE_PERLIO case. (As of perl5.8 ":raw" is deprecated in favour
480of passing NULL.)
50b80e25
NIS
481
482Portable cases are:
483
9849c14c 484 PerlIO_binmode(f,ptype,O_BINARY,NULL);
50b80e25
NIS
485and
486 PerlIO_binmode(f,ptype,O_TEXT,":crlf");
487
06936a3c
PN
488On Unix these calls probably have no effect whatsoever. Elsewhere
489they alter "\n" to CR,LF translation and possibly cause a special text
490"end of file" indicator to be written or honoured on read. The effect
491of making the call after doing any IO to the handle depends on the
492implementation. (It may be ignored, affect any data which is already
493buffered as well, or only apply to subsequent data.)
50b80e25
NIS
494
495=item PerlIO_debug(fmt,...)
496
06936a3c
PN
497PerlIO_debug is a printf()-like function which can be used for
498debugging. No return value. Its main use is inside PerlIO where using
499real printf, warn() etc. would recursively call PerlIO and be a
500problem.
50b80e25 501
2104c695
CB
502PerlIO_debug writes to the file named by $ENV{'PERLIO_DEBUG'} or defaults
503to stderr if the environment variable is not defined. Typical
06936a3c 504use might be
50b80e25 505
ada498b9 506 Bourne shells (sh, ksh, bash, zsh, ash, ...):
2104c695 507 PERLIO_DEBUG=/tmp/perliodebug.log ./perl -Di somescript some args
50b80e25 508
ada498b9 509 Csh/Tcsh:
2104c695
CB
510 setenv PERLIO_DEBUG /tmp/perliodebug.log
511 ./perl -Di somescript some args
50b80e25 512
ada498b9 513 If you have the "env" utility:
2104c695 514 env PERLIO_DEBUG=/tmp/perliodebug.log ./perl -Di somescript args
ada498b9 515
50b80e25 516 Win32:
2104c695
CB
517 set PERLIO_DEBUG=perliodebug.log
518 perl -Di somescript some args
50b80e25 519
2104c695
CB
520On a Perl built without C<-DDEBUGGING>, or when the C<-Di> command-line switch
521is not specified, or under taint, PerlIO_debug() is a no-op.
760ac839 522
54310121 523=back