perlapio - perl's IO abstraction interface. |
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.
fgetpos()
and fsetpos(). If platform does not
have the stdio calls then they are implemented in terms of PerlIO_tell()
and PerlIO_seek().
PerlIO_seek()
at some point.
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 *.
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
.
perlapio - perl's IO abstraction interface. |