perlapio - perl's IO abstraction interface.
    PerlIO *PerlIO_stdin(void);
    PerlIO *PerlIO_stdout(void);
    PerlIO *PerlIO_stderr(void);
    PerlIO *PerlIO_open(const char *,const char *);
    int     PerlIO_close(PerlIO *);
    int     PerlIO_stdoutf(const char *,...)
    int     PerlIO_puts(PerlIO *,const char *);
    int     PerlIO_putc(PerlIO *,int);
    int     PerlIO_write(PerlIO *,const void *,size_t);
    int     PerlIO_printf(PerlIO *, const char *,...);
    int     PerlIO_vprintf(PerlIO *, const char *, va_list);
    int     PerlIO_flush(PerlIO *);
    int     PerlIO_eof(PerlIO *);
    int     PerlIO_error(PerlIO *);
    void    PerlIO_clearerr(PerlIO *);
    int     PerlIO_getc(PerlIO *);
    int     PerlIO_ungetc(PerlIO *,int);
    int     PerlIO_read(PerlIO *,void *,size_t);
    int     PerlIO_fileno(PerlIO *);
    PerlIO *PerlIO_fdopen(int, const char *);
    PerlIO *PerlIO_importFILE(FILE *, int flags);
    FILE   *PerlIO_exportFILE(PerlIO *, int flags);
    FILE   *PerlIO_findFILE(PerlIO *);
    void    PerlIO_releaseFILE(PerlIO *,FILE *);
void PerlIO_setlinebuf(PerlIO *);
    long    PerlIO_tell(PerlIO *);
    int     PerlIO_seek(PerlIO *,off_t,int);
    int     PerlIO_getpos(PerlIO *,Fpos_t *)
    int     PerlIO_setpos(PerlIO *,Fpos_t *)
    void    PerlIO_rewind(PerlIO *);
    int     PerlIO_has_base(PerlIO *);
    int     PerlIO_has_cntptr(PerlIO *);
    int     PerlIO_fast_gets(PerlIO *);
    int     PerlIO_canset_cnt(PerlIO *);
    char   *PerlIO_get_ptr(PerlIO *);
    int     PerlIO_get_cnt(PerlIO *);
    void    PerlIO_set_cnt(PerlIO *,int);
    void    PerlIO_set_ptrcnt(PerlIO *,char *,int);
    char   *PerlIO_get_base(PerlIO *);
    int     PerlIO_get_bufsiz(PerlIO *);
Perl's source code should use the above functions instead of those defined in 
ANSI C's
 stdio.h. The perl headers will #define them to the 
I/O mechanism selected at Configure time.
The functions are modeled on those in stdio.h, but parameter order has been ``tidied up a little''.
stdin, stdout, stderr. They are written to look like ``function calls'' rather than variables
because this makes it easier to make them function calls if platform cannot export data to loaded modules, or if
(say) different ``threads'' might have different values.
fopen()/fdopen()
arguments are the same.
fprintf()/vfprintf()
equivalents.
printf() equivalent. printf
is #defined to this function, so it is (currently) legal to use printf(fmt,...) in perl sources.
fread() and 
fwrite(). Note that arguments are different, there is only one ``count'' and order has ``file'' first.
fputs() and 
fputc(). Note that arguments have been revised to have ``file'' first.
ungetc(). Note that arguments
have been revised to have ``file'' first.
getc().
feof().
ferror().
fileno(), note that on some
platforms, the meaning of ``fileno'' may not match Unix.
clearerr(), i.e., clears
'eof' and 'error' flags for the ``stream''.
fflush().
ftell().
fseek().
fgetpos() and 
fsetpos(). If platform does not have the stdio calls then they are implemented in terms of 
PerlIO_tell() and 
PerlIO_seek().
rewind(). Note may be redefined in terms of 
PerlIO_seek() at some point.
tmpfile(), i.e., returns an
anonymous PerlIO which will automatically be deleted when closed.
There is outline support for co-existence of PerlIO with stdio. Obviously if PerlIO is implemented in terms of stdio there is no problem. However if perlio is implemented on top of (say) sfio then mechanisms must exist to create a FILE * which can be passed to library code which is going to use stdio calls.
The fact that such a FILE * has been 'exported' is recorded, and may affect future PerlIO operations on the original PerlIO *.
setlinebuf(). Use is
deprecated pending further discussion. (Perl core uses it only when ``dumping''; it has nothing to do with $| auto-flush.)
In addition to user API above there is an ``implementation'' interface which allows perl to get at internals of PerlIO. The following calls correspond to the various FILE_xxx macros determined by Configure. This section is really of interest to only those concerned with detailed perl-core behaviour or implementing a PerlIO mapping.
  PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
                        PerlIO_canset_cnt(f) && \
                        `Can set pointer into buffer'
PerlIO_get_ptr and PerlIO_get_cnt.
If rather than formatting bugs, you encounter substantive content errors in these documents, such as mistakes in the explanations or code, please use the perlbug utility included with the Perl distribution.