home *** CD-ROM | disk | FTP | other *** search
- =head1 NAME
-
- perlapio - perl's IO abstraction interface.
-
- =head1 SYNOPSIS
-
- 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 *);
-
- =head1 DESCRIPTION
-
- Perl's source code should use the above functions instead of those
- defined in ANSI C's I<stdio.h>. The perl headers will C<#define> them to
- the I/O mechanism selected at Configure time.
-
- The functions are modeled on those in I<stdio.h>, but parameter order
- has been "tidied up a little".
-
- =over 4
-
- =item B<PerlIO *>
-
- This 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).
-
- =item B<PerlIO_stdin()>, B<PerlIO_stdout()>, B<PerlIO_stderr()>
-
- Use these rather than C<stdin>, C<stdout>, C<stderr>. They are written
- to look like "function calls" rather than variables because this makes
- it easier to I<make them> function calls if platform cannot export data
- to loaded modules, or if (say) different "threads" might have different
- values.
-
- =item B<PerlIO_open(path, mode)>, B<PerlIO_fdopen(fd,mode)>
-
- These correspond to fopen()/fdopen() arguments are the same.
-
- =item B<PerlIO_printf(f,fmt,...)>, B<PerlIO_vprintf(f,fmt,a)>
-
- These are fprintf()/vfprintf() equivalents.
-
- =item B<PerlIO_stdoutf(fmt,...)>
-
- This is printf() equivalent. printf is #defined to this function,
- so it is (currently) legal to use C<printf(fmt,...)> in perl sources.
-
- =item B<PerlIO_read(f,buf,count)>, B<PerlIO_write(f,buf,count)>
-
- These correspond to fread() and fwrite(). Note that arguments
- are different, there is only one "count" and order has
- "file" first.
-
- =item B<PerlIO_close(f)>
-
- =item B<PerlIO_puts(f,s)>, B<PerlIO_putc(f,c)>
-
- These correspond to fputs() and fputc().
- Note that arguments have been revised to have "file" first.
-
- =item B<PerlIO_ungetc(f,c)>
-
- This corresponds to ungetc().
- Note that arguments have been revised to have "file" first.
-
- =item B<PerlIO_getc(f)>
-
- This corresponds to getc().
-
- =item B<PerlIO_eof(f)>
-
- This corresponds to feof().
-
- =item B<PerlIO_error(f)>
-
- This corresponds to ferror().
-
- =item B<PerlIO_fileno(f)>
-
- This corresponds to fileno(), note that on some platforms,
- the meaning of "fileno" may not match Unix.
-
- =item B<PerlIO_clearerr(f)>
-
- This corresponds to clearerr(), i.e., clears 'eof' and 'error'
- flags for the "stream".
-
- =item B<PerlIO_flush(f)>
-
- This corresponds to fflush().
-
- =item B<PerlIO_tell(f)>
-
- This corresponds to ftell().
-
- =item B<PerlIO_seek(f,o,w)>
-
- This corresponds to fseek().
-
- =item B<PerlIO_getpos(f,p)>, B<PerlIO_setpos(f,p)>
-
- These correspond to fgetpos() and fsetpos(). If platform does not
- have the stdio calls then they are implemented in terms of PerlIO_tell()
- and PerlIO_seek().
-
- =item B<PerlIO_rewind(f)>
-
- This corresponds to rewind(). Note may be redefined
- in terms of PerlIO_seek() at some point.
-
- =item B<PerlIO_tmpfile()>
-
- This corresponds to tmpfile(), i.e., returns an anonymous
- PerlIO which will automatically be deleted when closed.
-
- =back
-
- =head2 Co-existence with stdio
-
- 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.
-
- =over 4
-
- =item B<PerlIO_importFILE(f,flags)>
-
- Used to get a PerlIO * from a FILE *.
- May need additional arguments, interface under review.
-
- =item B<PerlIO_exportFILE(f,flags)>
-
- Given an PerlIO * return a 'native' FILE * suitable for
- passing to code expecting to be compiled and linked with
- ANSI C I<stdio.h>.
-
- The fact that such a FILE * has been 'exported' is recorded,
- and may affect future PerlIO operations on the original
- PerlIO *.
-
- =item B<PerlIO_findFILE(f)>
-
- Returns previously 'exported' FILE * (if any).
- Place holder until interface is fully defined.
-
- =item B<PerlIO_releaseFILE(p,f)>
-
- Calling PerlIO_releaseFILE informs PerlIO that all use
- of FILE * is complete. It is removed from list of 'exported'
- FILE *s, and associated PerlIO * should revert to original
- behaviour.
-
- =item B<PerlIO_setlinebuf(f)>
-
- This corresponds to setlinebuf(). Use is deprecated pending
- further discussion. (Perl core uses it I<only> when "dumping";
- it has nothing to do with $| auto-flush.)
-
- =back
-
- 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.
-
- =over 4
-
- =item B<PerlIO_has_cntptr(f)>
-
- Implementation can return pointer to current position in the "buffer" and
- a count of bytes available in the buffer.
-
- =item B<PerlIO_get_ptr(f)>
-
- Return pointer to next readable byte in buffer.
-
- =item B<PerlIO_get_cnt(f)>
-
- Return count of readable bytes in the buffer.
-
- =item B<PerlIO_canset_cnt(f)>
-
- Implementation can adjust its idea of number of
- bytes in the buffer.
-
- =item B<PerlIO_fast_gets(f)>
-
- Implementation has all the interfaces required to
- allow perl's fast code to handle <FILE> mechanism.
-
- PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
- PerlIO_canset_cnt(f) && \
- `Can set pointer into buffer'
-
- =item B<PerlIO_set_ptrcnt(f,p,c)>
-
- Set pointer into buffer, and a count of bytes still in the
- buffer. Should be used only to set
- pointer to within range implied by previous calls
- to C<PerlIO_get_ptr> and C<PerlIO_get_cnt>.
-
- =item B<PerlIO_set_cnt(f,c)>
-
- Obscure - set count of bytes in the buffer. Deprecated.
- Currently used in only doio.c to force count < -1 to -1.
- Perhaps should be PerlIO_set_empty or similar.
- This call may actually do nothing if "count" is deduced from pointer
- and a "limit".
-
- =item B<PerlIO_has_base(f)>
-
- Implementation has a buffer, and can return pointer
- to whole buffer and its size. Used by perl for B<-T> / B<-B> tests.
- Other uses would be very obscure...
-
- =item B<PerlIO_get_base(f)>
-
- Return I<start> of buffer.
-
- =item B<PerlIO_get_bufsiz(f)>
-
- Return I<total size> of buffer.
-
- =back
-