[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 =head1 NAME 2 3 perliol - C API for Perl's implementation of IO in Layers. 4 5 =head1 SYNOPSIS 6 7 /* Defining a layer ... */ 8 #include <perliol.h> 9 10 =head1 DESCRIPTION 11 12 This document describes the behavior and implementation of the PerlIO 13 abstraction described in L<perlapio> when C<USE_PERLIO> is defined (and 14 C<USE_SFIO> is not). 15 16 =head2 History and Background 17 18 The PerlIO abstraction was introduced in perl5.003_02 but languished as 19 just an abstraction until perl5.7.0. However during that time a number 20 of perl extensions switched to using it, so the API is mostly fixed to 21 maintain (source) compatibility. 22 23 The aim of the implementation is to provide the PerlIO API in a flexible 24 and platform neutral manner. It is also a trial of an "Object Oriented 25 C, with vtables" approach which may be applied to Perl 6. 26 27 =head2 Basic Structure 28 29 PerlIO is a stack of layers. 30 31 The low levels of the stack work with the low-level operating system 32 calls (file descriptors in C) getting bytes in and out, the higher 33 layers of the stack buffer, filter, and otherwise manipulate the I/O, 34 and return characters (or bytes) to Perl. Terms I<above> and I<below> 35 are used to refer to the relative positioning of the stack layers. 36 37 A layer contains a "vtable", the table of I/O operations (at C level 38 a table of function pointers), and status flags. The functions in the 39 vtable implement operations like "open", "read", and "write". 40 41 When I/O, for example "read", is requested, the request goes from Perl 42 first down the stack using "read" functions of each layer, then at the 43 bottom the input is requested from the operating system services, then 44 the result is returned up the stack, finally being interpreted as Perl 45 data. 46 47 The requests do not necessarily go always all the way down to the 48 operating system: that's where PerlIO buffering comes into play. 49 50 When you do an open() and specify extra PerlIO layers to be deployed, 51 the layers you specify are "pushed" on top of the already existing 52 default stack. One way to see it is that "operating system is 53 on the left" and "Perl is on the right". 54 55 What exact layers are in this default stack depends on a lot of 56 things: your operating system, Perl version, Perl compile time 57 configuration, and Perl runtime configuration. See L<PerlIO>, 58 L<perlrun/PERLIO>, and L<open> for more information. 59 60 binmode() operates similarly to open(): by default the specified 61 layers are pushed on top of the existing stack. 62 63 However, note that even as the specified layers are "pushed on top" 64 for open() and binmode(), this doesn't mean that the effects are 65 limited to the "top": PerlIO layers can be very 'active' and inspect 66 and affect layers also deeper in the stack. As an example there 67 is a layer called "raw" which repeatedly "pops" layers until 68 it reaches the first layer that has declared itself capable of 69 handling binary data. The "pushed" layers are processed in left-to-right 70 order. 71 72 sysopen() operates (unsurprisingly) at a lower level in the stack than 73 open(). For example in UNIX or UNIX-like systems sysopen() operates 74 directly at the level of file descriptors: in the terms of PerlIO 75 layers, it uses only the "unix" layer, which is a rather thin wrapper 76 on top of the UNIX file descriptors. 77 78 =head2 Layers vs Disciplines 79 80 Initial discussion of the ability to modify IO streams behaviour used 81 the term "discipline" for the entities which were added. This came (I 82 believe) from the use of the term in "sfio", which in turn borrowed it 83 from "line disciplines" on Unix terminals. However, this document (and 84 the C code) uses the term "layer". 85 86 This is, I hope, a natural term given the implementation, and should 87 avoid connotations that are inherent in earlier uses of "discipline" 88 for things which are rather different. 89 90 =head2 Data Structures 91 92 The basic data structure is a PerlIOl: 93 94 typedef struct _PerlIO PerlIOl; 95 typedef struct _PerlIO_funcs PerlIO_funcs; 96 typedef PerlIOl *PerlIO; 97 98 struct _PerlIO 99 { 100 PerlIOl * next; /* Lower layer */ 101 PerlIO_funcs * tab; /* Functions for this layer */ 102 IV flags; /* Various flags for state */ 103 }; 104 105 A C<PerlIOl *> is a pointer to the struct, and the I<application> 106 level C<PerlIO *> is a pointer to a C<PerlIOl *> - i.e. a pointer 107 to a pointer to the struct. This allows the application level C<PerlIO *> 108 to remain constant while the actual C<PerlIOl *> underneath 109 changes. (Compare perl's C<SV *> which remains constant while its 110 C<sv_any> field changes as the scalar's type changes.) An IO stream is 111 then in general represented as a pointer to this linked-list of 112 "layers". 113 114 It should be noted that because of the double indirection in a C<PerlIO *>, 115 a C<< &(perlio->next) >> "is" a C<PerlIO *>, and so to some degree 116 at least one layer can use the "standard" API on the next layer down. 117 118 A "layer" is composed of two parts: 119 120 =over 4 121 122 =item 1. 123 124 The functions and attributes of the "layer class". 125 126 =item 2. 127 128 The per-instance data for a particular handle. 129 130 =back 131 132 =head2 Functions and Attributes 133 134 The functions and attributes are accessed via the "tab" (for table) 135 member of C<PerlIOl>. The functions (methods of the layer "class") are 136 fixed, and are defined by the C<PerlIO_funcs> type. They are broadly the 137 same as the public C<PerlIO_xxxxx> functions: 138 139 struct _PerlIO_funcs 140 { 141 Size_t fsize; 142 char * name; 143 Size_t size; 144 IV kind; 145 IV (*Pushed)(pTHX_ PerlIO *f,const char *mode,SV *arg, PerlIO_funcs *tab); 146 IV (*Popped)(pTHX_ PerlIO *f); 147 PerlIO * (*Open)(pTHX_ PerlIO_funcs *tab, 148 AV *layers, IV n, 149 const char *mode, 150 int fd, int imode, int perm, 151 PerlIO *old, 152 int narg, SV **args); 153 IV (*Binmode)(pTHX_ PerlIO *f); 154 SV * (*Getarg)(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags) 155 IV (*Fileno)(pTHX_ PerlIO *f); 156 PerlIO * (*Dup)(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags) 157 /* Unix-like functions - cf sfio line disciplines */ 158 SSize_t (*Read)(pTHX_ PerlIO *f, void *vbuf, Size_t count); 159 SSize_t (*Unread)(pTHX_ PerlIO *f, const void *vbuf, Size_t count); 160 SSize_t (*Write)(pTHX_ PerlIO *f, const void *vbuf, Size_t count); 161 IV (*Seek)(pTHX_ PerlIO *f, Off_t offset, int whence); 162 Off_t (*Tell)(pTHX_ PerlIO *f); 163 IV (*Close)(pTHX_ PerlIO *f); 164 /* Stdio-like buffered IO functions */ 165 IV (*Flush)(pTHX_ PerlIO *f); 166 IV (*Fill)(pTHX_ PerlIO *f); 167 IV (*Eof)(pTHX_ PerlIO *f); 168 IV (*Error)(pTHX_ PerlIO *f); 169 void (*Clearerr)(pTHX_ PerlIO *f); 170 void (*Setlinebuf)(pTHX_ PerlIO *f); 171 /* Perl's snooping functions */ 172 STDCHAR * (*Get_base)(pTHX_ PerlIO *f); 173 Size_t (*Get_bufsiz)(pTHX_ PerlIO *f); 174 STDCHAR * (*Get_ptr)(pTHX_ PerlIO *f); 175 SSize_t (*Get_cnt)(pTHX_ PerlIO *f); 176 void (*Set_ptrcnt)(pTHX_ PerlIO *f,STDCHAR *ptr,SSize_t cnt); 177 }; 178 179 The first few members of the struct give a function table size for 180 compatibility check "name" for the layer, the size to C<malloc> for the per-instance data, 181 and some flags which are attributes of the class as whole (such as whether it is a buffering 182 layer), then follow the functions which fall into four basic groups: 183 184 =over 4 185 186 =item 1. 187 188 Opening and setup functions 189 190 =item 2. 191 192 Basic IO operations 193 194 =item 3. 195 196 Stdio class buffering options. 197 198 =item 4. 199 200 Functions to support Perl's traditional "fast" access to the buffer. 201 202 =back 203 204 A layer does not have to implement all the functions, but the whole 205 table has to be present. Unimplemented slots can be NULL (which will 206 result in an error when called) or can be filled in with stubs to 207 "inherit" behaviour from a "base class". This "inheritance" is fixed 208 for all instances of the layer, but as the layer chooses which stubs 209 to populate the table, limited "multiple inheritance" is possible. 210 211 =head2 Per-instance Data 212 213 The per-instance data are held in memory beyond the basic PerlIOl 214 struct, by making a PerlIOl the first member of the layer's struct 215 thus: 216 217 typedef struct 218 { 219 struct _PerlIO base; /* Base "class" info */ 220 STDCHAR * buf; /* Start of buffer */ 221 STDCHAR * end; /* End of valid part of buffer */ 222 STDCHAR * ptr; /* Current position in buffer */ 223 Off_t posn; /* Offset of buf into the file */ 224 Size_t bufsiz; /* Real size of buffer */ 225 IV oneword; /* Emergency buffer */ 226 } PerlIOBuf; 227 228 In this way (as for perl's scalars) a pointer to a PerlIOBuf can be 229 treated as a pointer to a PerlIOl. 230 231 =head2 Layers in action. 232 233 table perlio unix 234 | | 235 +-----------+ +----------+ +--------+ 236 PerlIO ->| |--->| next |--->| NULL | 237 +-----------+ +----------+ +--------+ 238 | | | buffer | | fd | 239 +-----------+ | | +--------+ 240 | | +----------+ 241 242 243 The above attempts to show how the layer scheme works in a simple case. 244 The application's C<PerlIO *> points to an entry in the table(s) 245 representing open (allocated) handles. For example the first three slots 246 in the table correspond to C<stdin>,C<stdout> and C<stderr>. The table 247 in turn points to the current "top" layer for the handle - in this case 248 an instance of the generic buffering layer "perlio". That layer in turn 249 points to the next layer down - in this case the low-level "unix" layer. 250 251 The above is roughly equivalent to a "stdio" buffered stream, but with 252 much more flexibility: 253 254 =over 4 255 256 =item * 257 258 If Unix level C<read>/C<write>/C<lseek> is not appropriate for (say) 259 sockets then the "unix" layer can be replaced (at open time or even 260 dynamically) with a "socket" layer. 261 262 =item * 263 264 Different handles can have different buffering schemes. The "top" 265 layer could be the "mmap" layer if reading disk files was quicker 266 using C<mmap> than C<read>. An "unbuffered" stream can be implemented 267 simply by not having a buffer layer. 268 269 =item * 270 271 Extra layers can be inserted to process the data as it flows through. 272 This was the driving need for including the scheme in perl 5.7.0+ - we 273 needed a mechanism to allow data to be translated between perl's 274 internal encoding (conceptually at least Unicode as UTF-8), and the 275 "native" format used by the system. This is provided by the 276 ":encoding(xxxx)" layer which typically sits above the buffering layer. 277 278 =item * 279 280 A layer can be added that does "\n" to CRLF translation. This layer 281 can be used on any platform, not just those that normally do such 282 things. 283 284 =back 285 286 =head2 Per-instance flag bits 287 288 The generic flag bits are a hybrid of C<O_XXXXX> style flags deduced 289 from the mode string passed to C<PerlIO_open()>, and state bits for 290 typical buffer layers. 291 292 =over 4 293 294 =item PERLIO_F_EOF 295 296 End of file. 297 298 =item PERLIO_F_CANWRITE 299 300 Writes are permitted, i.e. opened as "w" or "r+" or "a", etc. 301 302 =item PERLIO_F_CANREAD 303 304 Reads are permitted i.e. opened "r" or "w+" (or even "a+" - ick). 305 306 =item PERLIO_F_ERROR 307 308 An error has occurred (for C<PerlIO_error()>). 309 310 =item PERLIO_F_TRUNCATE 311 312 Truncate file suggested by open mode. 313 314 =item PERLIO_F_APPEND 315 316 All writes should be appends. 317 318 =item PERLIO_F_CRLF 319 320 Layer is performing Win32-like "\n" mapped to CR,LF for output and CR,LF 321 mapped to "\n" for input. Normally the provided "crlf" layer is the only 322 layer that need bother about this. C<PerlIO_binmode()> will mess with this 323 flag rather than add/remove layers if the C<PERLIO_K_CANCRLF> bit is set 324 for the layers class. 325 326 =item PERLIO_F_UTF8 327 328 Data written to this layer should be UTF-8 encoded; data provided 329 by this layer should be considered UTF-8 encoded. Can be set on any layer 330 by ":utf8" dummy layer. Also set on ":encoding" layer. 331 332 =item PERLIO_F_UNBUF 333 334 Layer is unbuffered - i.e. write to next layer down should occur for 335 each write to this layer. 336 337 =item PERLIO_F_WRBUF 338 339 The buffer for this layer currently holds data written to it but not sent 340 to next layer. 341 342 =item PERLIO_F_RDBUF 343 344 The buffer for this layer currently holds unconsumed data read from 345 layer below. 346 347 =item PERLIO_F_LINEBUF 348 349 Layer is line buffered. Write data should be passed to next layer down 350 whenever a "\n" is seen. Any data beyond the "\n" should then be 351 processed. 352 353 =item PERLIO_F_TEMP 354 355 File has been C<unlink()>ed, or should be deleted on C<close()>. 356 357 =item PERLIO_F_OPEN 358 359 Handle is open. 360 361 =item PERLIO_F_FASTGETS 362 363 This instance of this layer supports the "fast C<gets>" interface. 364 Normally set based on C<PERLIO_K_FASTGETS> for the class and by the 365 existence of the function(s) in the table. However a class that 366 normally provides that interface may need to avoid it on a 367 particular instance. The "pending" layer needs to do this when 368 it is pushed above a layer which does not support the interface. 369 (Perl's C<sv_gets()> does not expect the streams fast C<gets> behaviour 370 to change during one "get".) 371 372 =back 373 374 =head2 Methods in Detail 375 376 =over 4 377 378 =item fsize 379 380 Size_t fsize; 381 382 Size of the function table. This is compared against the value PerlIO 383 code "knows" as a compatibility check. Future versions I<may> be able 384 to tolerate layers compiled against an old version of the headers. 385 386 =item name 387 388 char * name; 389 390 The name of the layer whose open() method Perl should invoke on 391 open(). For example if the layer is called APR, you will call: 392 393 open $fh, ">:APR", ... 394 395 and Perl knows that it has to invoke the PerlIOAPR_open() method 396 implemented by the APR layer. 397 398 =item size 399 400 Size_t size; 401 402 The size of the per-instance data structure, e.g.: 403 404 sizeof(PerlIOAPR) 405 406 If this field is zero then C<PerlIO_pushed> does not malloc anything 407 and assumes layer's Pushed function will do any required layer stack 408 manipulation - used to avoid malloc/free overhead for dummy layers. 409 If the field is non-zero it must be at least the size of C<PerlIOl>, 410 C<PerlIO_pushed> will allocate memory for the layer's data structures 411 and link new layer onto the stream's stack. (If the layer's Pushed 412 method returns an error indication the layer is popped again.) 413 414 =item kind 415 416 IV kind; 417 418 =over 4 419 420 =item * PERLIO_K_BUFFERED 421 422 The layer is buffered. 423 424 =item * PERLIO_K_RAW 425 426 The layer is acceptable to have in a binmode(FH) stack - i.e. it does not 427 (or will configure itself not to) transform bytes passing through it. 428 429 =item * PERLIO_K_CANCRLF 430 431 Layer can translate between "\n" and CRLF line ends. 432 433 =item * PERLIO_K_FASTGETS 434 435 Layer allows buffer snooping. 436 437 =item * PERLIO_K_MULTIARG 438 439 Used when the layer's open() accepts more arguments than usual. The 440 extra arguments should come not before the C<MODE> argument. When this 441 flag is used it's up to the layer to validate the args. 442 443 =back 444 445 =item Pushed 446 447 IV (*Pushed)(pTHX_ PerlIO *f,const char *mode, SV *arg); 448 449 The only absolutely mandatory method. Called when the layer is pushed 450 onto the stack. The C<mode> argument may be NULL if this occurs 451 post-open. The C<arg> will be non-C<NULL> if an argument string was 452 passed. In most cases this should call C<PerlIOBase_pushed()> to 453 convert C<mode> into the appropriate C<PERLIO_F_XXXXX> flags in 454 addition to any actions the layer itself takes. If a layer is not 455 expecting an argument it need neither save the one passed to it, nor 456 provide C<Getarg()> (it could perhaps C<Perl_warn> that the argument 457 was un-expected). 458 459 Returns 0 on success. On failure returns -1 and should set errno. 460 461 =item Popped 462 463 IV (*Popped)(pTHX_ PerlIO *f); 464 465 Called when the layer is popped from the stack. A layer will normally 466 be popped after C<Close()> is called. But a layer can be popped 467 without being closed if the program is dynamically managing layers on 468 the stream. In such cases C<Popped()> should free any resources 469 (buffers, translation tables, ...) not held directly in the layer's 470 struct. It should also C<Unread()> any unconsumed data that has been 471 read and buffered from the layer below back to that layer, so that it 472 can be re-provided to what ever is now above. 473 474 Returns 0 on success and failure. If C<Popped()> returns I<true> then 475 I<perlio.c> assumes that either the layer has popped itself, or the 476 layer is super special and needs to be retained for other reasons. 477 In most cases it should return I<false>. 478 479 =item Open 480 481 PerlIO * (*Open)(...); 482 483 The C<Open()> method has lots of arguments because it combines the 484 functions of perl's C<open>, C<PerlIO_open>, perl's C<sysopen>, 485 C<PerlIO_fdopen> and C<PerlIO_reopen>. The full prototype is as 486 follows: 487 488 PerlIO * (*Open)(pTHX_ PerlIO_funcs *tab, 489 AV *layers, IV n, 490 const char *mode, 491 int fd, int imode, int perm, 492 PerlIO *old, 493 int narg, SV **args); 494 495 Open should (perhaps indirectly) call C<PerlIO_allocate()> to allocate 496 a slot in the table and associate it with the layers information for 497 the opened file, by calling C<PerlIO_push>. The I<layers> AV is an 498 array of all the layers destined for the C<PerlIO *>, and any 499 arguments passed to them, I<n> is the index into that array of the 500 layer being called. The macro C<PerlIOArg> will return a (possibly 501 C<NULL>) SV * for the argument passed to the layer. 502 503 The I<mode> string is an "C<fopen()>-like" string which would match 504 the regular expression C</^[I#]?[rwa]\+?[bt]?$/>. 505 506 The C<'I'> prefix is used during creation of C<stdin>..C<stderr> via 507 special C<PerlIO_fdopen> calls; the C<'#'> prefix means that this is 508 C<sysopen> and that I<imode> and I<perm> should be passed to 509 C<PerlLIO_open3>; C<'r'> means B<r>ead, C<'w'> means B<w>rite and 510 C<'a'> means B<a>ppend. The C<'+'> suffix means that both reading and 511 writing/appending are permitted. The C<'b'> suffix means file should 512 be binary, and C<'t'> means it is text. (Almost all layers should do 513 the IO in binary mode, and ignore the b/t bits. The C<:crlf> layer 514 should be pushed to handle the distinction.) 515 516 If I<old> is not C<NULL> then this is a C<PerlIO_reopen>. Perl itself 517 does not use this (yet?) and semantics are a little vague. 518 519 If I<fd> not negative then it is the numeric file descriptor I<fd>, 520 which will be open in a manner compatible with the supplied mode 521 string, the call is thus equivalent to C<PerlIO_fdopen>. In this case 522 I<nargs> will be zero. 523 524 If I<nargs> is greater than zero then it gives the number of arguments 525 passed to C<open>, otherwise it will be 1 if for example 526 C<PerlIO_open> was called. In simple cases SvPV_nolen(*args) is the 527 pathname to open. 528 529 Having said all that translation-only layers do not need to provide 530 C<Open()> at all, but rather leave the opening to a lower level layer 531 and wait to be "pushed". If a layer does provide C<Open()> it should 532 normally call the C<Open()> method of next layer down (if any) and 533 then push itself on top if that succeeds. 534 535 If C<PerlIO_push> was performed and open has failed, it must 536 C<PerlIO_pop> itself, since if it's not, the layer won't be removed 537 and may cause bad problems. 538 539 Returns C<NULL> on failure. 540 541 =item Binmode 542 543 IV (*Binmode)(pTHX_ PerlIO *f); 544 545 Optional. Used when C<:raw> layer is pushed (explicitly or as a result 546 of binmode(FH)). If not present layer will be popped. If present 547 should configure layer as binary (or pop itself) and return 0. 548 If it returns -1 for error C<binmode> will fail with layer 549 still on the stack. 550 551 =item Getarg 552 553 SV * (*Getarg)(pTHX_ PerlIO *f, 554 CLONE_PARAMS *param, int flags); 555 556 Optional. If present should return an SV * representing the string 557 argument passed to the layer when it was 558 pushed. e.g. ":encoding(ascii)" would return an SvPV with value 559 "ascii". (I<param> and I<flags> arguments can be ignored in most 560 cases) 561 562 C<Dup> uses C<Getarg> to retrieve the argument originally passed to 563 C<Pushed>, so you must implement this function if your layer has an 564 extra argument to C<Pushed> and will ever be C<Dup>ed. 565 566 =item Fileno 567 568 IV (*Fileno)(pTHX_ PerlIO *f); 569 570 Returns the Unix/Posix numeric file descriptor for the handle. Normally 571 C<PerlIOBase_fileno()> (which just asks next layer down) will suffice 572 for this. 573 574 Returns -1 on error, which is considered to include the case where the 575 layer cannot provide such a file descriptor. 576 577 =item Dup 578 579 PerlIO * (*Dup)(pTHX_ PerlIO *f, PerlIO *o, 580 CLONE_PARAMS *param, int flags); 581 582 XXX: Needs more docs. 583 584 Used as part of the "clone" process when a thread is spawned (in which 585 case param will be non-NULL) and when a stream is being duplicated via 586 '&' in the C<open>. 587 588 Similar to C<Open>, returns PerlIO* on success, C<NULL> on failure. 589 590 =item Read 591 592 SSize_t (*Read)(pTHX_ PerlIO *f, void *vbuf, Size_t count); 593 594 Basic read operation. 595 596 Typically will call C<Fill> and manipulate pointers (possibly via the 597 API). C<PerlIOBuf_read()> may be suitable for derived classes which 598 provide "fast gets" methods. 599 600 Returns actual bytes read, or -1 on an error. 601 602 =item Unread 603 604 SSize_t (*Unread)(pTHX_ PerlIO *f, 605 const void *vbuf, Size_t count); 606 607 A superset of stdio's C<ungetc()>. Should arrange for future reads to 608 see the bytes in C<vbuf>. If there is no obviously better implementation 609 then C<PerlIOBase_unread()> provides the function by pushing a "fake" 610 "pending" layer above the calling layer. 611 612 Returns the number of unread chars. 613 614 =item Write 615 616 SSize_t (*Write)(PerlIO *f, const void *vbuf, Size_t count); 617 618 Basic write operation. 619 620 Returns bytes written or -1 on an error. 621 622 =item Seek 623 624 IV (*Seek)(pTHX_ PerlIO *f, Off_t offset, int whence); 625 626 Position the file pointer. Should normally call its own C<Flush> 627 method and then the C<Seek> method of next layer down. 628 629 Returns 0 on success, -1 on failure. 630 631 =item Tell 632 633 Off_t (*Tell)(pTHX_ PerlIO *f); 634 635 Return the file pointer. May be based on layers cached concept of 636 position to avoid overhead. 637 638 Returns -1 on failure to get the file pointer. 639 640 =item Close 641 642 IV (*Close)(pTHX_ PerlIO *f); 643 644 Close the stream. Should normally call C<PerlIOBase_close()> to flush 645 itself and close layers below, and then deallocate any data structures 646 (buffers, translation tables, ...) not held directly in the data 647 structure. 648 649 Returns 0 on success, -1 on failure. 650 651 =item Flush 652 653 IV (*Flush)(pTHX_ PerlIO *f); 654 655 Should make stream's state consistent with layers below. That is, any 656 buffered write data should be written, and file position of lower layers 657 adjusted for data read from below but not actually consumed. 658 (Should perhaps C<Unread()> such data to the lower layer.) 659 660 Returns 0 on success, -1 on failure. 661 662 =item Fill 663 664 IV (*Fill)(pTHX_ PerlIO *f); 665 666 The buffer for this layer should be filled (for read) from layer 667 below. When you "subclass" PerlIOBuf layer, you want to use its 668 I<_read> method and to supply your own fill method, which fills the 669 PerlIOBuf's buffer. 670 671 Returns 0 on success, -1 on failure. 672 673 =item Eof 674 675 IV (*Eof)(pTHX_ PerlIO *f); 676 677 Return end-of-file indicator. C<PerlIOBase_eof()> is normally sufficient. 678 679 Returns 0 on end-of-file, 1 if not end-of-file, -1 on error. 680 681 =item Error 682 683 IV (*Error)(pTHX_ PerlIO *f); 684 685 Return error indicator. C<PerlIOBase_error()> is normally sufficient. 686 687 Returns 1 if there is an error (usually when C<PERLIO_F_ERROR> is set, 688 0 otherwise. 689 690 =item Clearerr 691 692 void (*Clearerr)(pTHX_ PerlIO *f); 693 694 Clear end-of-file and error indicators. Should call C<PerlIOBase_clearerr()> 695 to set the C<PERLIO_F_XXXXX> flags, which may suffice. 696 697 =item Setlinebuf 698 699 void (*Setlinebuf)(pTHX_ PerlIO *f); 700 701 Mark the stream as line buffered. C<PerlIOBase_setlinebuf()> sets the 702 PERLIO_F_LINEBUF flag and is normally sufficient. 703 704 =item Get_base 705 706 STDCHAR * (*Get_base)(pTHX_ PerlIO *f); 707 708 Allocate (if not already done so) the read buffer for this layer and 709 return pointer to it. Return NULL on failure. 710 711 =item Get_bufsiz 712 713 Size_t (*Get_bufsiz)(pTHX_ PerlIO *f); 714 715 Return the number of bytes that last C<Fill()> put in the buffer. 716 717 =item Get_ptr 718 719 STDCHAR * (*Get_ptr)(pTHX_ PerlIO *f); 720 721 Return the current read pointer relative to this layer's buffer. 722 723 =item Get_cnt 724 725 SSize_t (*Get_cnt)(pTHX_ PerlIO *f); 726 727 Return the number of bytes left to be read in the current buffer. 728 729 =item Set_ptrcnt 730 731 void (*Set_ptrcnt)(pTHX_ PerlIO *f, 732 STDCHAR *ptr, SSize_t cnt); 733 734 Adjust the read pointer and count of bytes to match C<ptr> and/or C<cnt>. 735 The application (or layer above) must ensure they are consistent. 736 (Checking is allowed by the paranoid.) 737 738 =back 739 740 =head2 Utilities 741 742 To ask for the next layer down use PerlIONext(PerlIO *f). 743 744 To check that a PerlIO* is valid use PerlIOValid(PerlIO *f). (All 745 this does is really just to check that the pointer is non-NULL and 746 that the pointer behind that is non-NULL.) 747 748 PerlIOBase(PerlIO *f) returns the "Base" pointer, or in other words, 749 the C<PerlIOl*> pointer. 750 751 PerlIOSelf(PerlIO* f, type) return the PerlIOBase cast to a type. 752 753 Perl_PerlIO_or_Base(PerlIO* f, callback, base, failure, args) either 754 calls the I<callback> from the functions of the layer I<f> (just by 755 the name of the IO function, like "Read") with the I<args>, or if 756 there is no such callback, calls the I<base> version of the callback 757 with the same args, or if the f is invalid, set errno to EBADF and 758 return I<failure>. 759 760 Perl_PerlIO_or_fail(PerlIO* f, callback, failure, args) either calls 761 the I<callback> of the functions of the layer I<f> with the I<args>, 762 or if there is no such callback, set errno to EINVAL. Or if the f is 763 invalid, set errno to EBADF and return I<failure>. 764 765 Perl_PerlIO_or_Base_void(PerlIO* f, callback, base, args) either calls 766 the I<callback> of the functions of the layer I<f> with the I<args>, 767 or if there is no such callback, calls the I<base> version of the 768 callback with the same args, or if the f is invalid, set errno to 769 EBADF. 770 771 Perl_PerlIO_or_fail_void(PerlIO* f, callback, args) either calls the 772 I<callback> of the functions of the layer I<f> with the I<args>, or if 773 there is no such callback, set errno to EINVAL. Or if the f is 774 invalid, set errno to EBADF. 775 776 =head2 Implementing PerlIO Layers 777 778 If you find the implementation document unclear or not sufficient, 779 look at the existing PerlIO layer implementations, which include: 780 781 =over 782 783 =item * C implementations 784 785 The F<perlio.c> and F<perliol.h> in the Perl core implement the 786 "unix", "perlio", "stdio", "crlf", "utf8", "byte", "raw", "pending" 787 layers, and also the "mmap" and "win32" layers if applicable. 788 (The "win32" is currently unfinished and unused, to see what is used 789 instead in Win32, see L<PerlIO/"Querying the layers of filehandles"> .) 790 791 PerlIO::encoding, PerlIO::scalar, PerlIO::via in the Perl core. 792 793 PerlIO::gzip and APR::PerlIO (mod_perl 2.0) on CPAN. 794 795 =item * Perl implementations 796 797 PerlIO::via::QuotedPrint in the Perl core and PerlIO::via::* on CPAN. 798 799 =back 800 801 If you are creating a PerlIO layer, you may want to be lazy, in other 802 words, implement only the methods that interest you. The other methods 803 you can either replace with the "blank" methods 804 805 PerlIOBase_noop_ok 806 PerlIOBase_noop_fail 807 808 (which do nothing, and return zero and -1, respectively) or for 809 certain methods you may assume a default behaviour by using a NULL 810 method. The Open method looks for help in the 'parent' layer. 811 The following table summarizes the behaviour: 812 813 method behaviour with NULL 814 815 Clearerr PerlIOBase_clearerr 816 Close PerlIOBase_close 817 Dup PerlIOBase_dup 818 Eof PerlIOBase_eof 819 Error PerlIOBase_error 820 Fileno PerlIOBase_fileno 821 Fill FAILURE 822 Flush SUCCESS 823 Getarg SUCCESS 824 Get_base FAILURE 825 Get_bufsiz FAILURE 826 Get_cnt FAILURE 827 Get_ptr FAILURE 828 Open INHERITED 829 Popped SUCCESS 830 Pushed SUCCESS 831 Read PerlIOBase_read 832 Seek FAILURE 833 Set_cnt FAILURE 834 Set_ptrcnt FAILURE 835 Setlinebuf PerlIOBase_setlinebuf 836 Tell FAILURE 837 Unread PerlIOBase_unread 838 Write FAILURE 839 840 FAILURE Set errno (to EINVAL in UNIXish, to LIB$_INVARG in VMS) and 841 return -1 (for numeric return values) or NULL (for pointers) 842 INHERITED Inherited from the layer below 843 SUCCESS Return 0 (for numeric return values) or a pointer 844 845 =head2 Core Layers 846 847 The file C<perlio.c> provides the following layers: 848 849 =over 4 850 851 =item "unix" 852 853 A basic non-buffered layer which calls Unix/POSIX C<read()>, C<write()>, 854 C<lseek()>, C<close()>. No buffering. Even on platforms that distinguish 855 between O_TEXT and O_BINARY this layer is always O_BINARY. 856 857 =item "perlio" 858 859 A very complete generic buffering layer which provides the whole of 860 PerlIO API. It is also intended to be used as a "base class" for other 861 layers. (For example its C<Read()> method is implemented in terms of 862 the C<Get_cnt()>/C<Get_ptr()>/C<Set_ptrcnt()> methods). 863 864 "perlio" over "unix" provides a complete replacement for stdio as seen 865 via PerlIO API. This is the default for USE_PERLIO when system's stdio 866 does not permit perl's "fast gets" access, and which do not 867 distinguish between C<O_TEXT> and C<O_BINARY>. 868 869 =item "stdio" 870 871 A layer which provides the PerlIO API via the layer scheme, but 872 implements it by calling system's stdio. This is (currently) the default 873 if system's stdio provides sufficient access to allow perl's "fast gets" 874 access and which do not distinguish between C<O_TEXT> and C<O_BINARY>. 875 876 =item "crlf" 877 878 A layer derived using "perlio" as a base class. It provides Win32-like 879 "\n" to CR,LF translation. Can either be applied above "perlio" or serve 880 as the buffer layer itself. "crlf" over "unix" is the default if system 881 distinguishes between C<O_TEXT> and C<O_BINARY> opens. (At some point 882 "unix" will be replaced by a "native" Win32 IO layer on that platform, 883 as Win32's read/write layer has various drawbacks.) The "crlf" layer is 884 a reasonable model for a layer which transforms data in some way. 885 886 =item "mmap" 887 888 If Configure detects C<mmap()> functions this layer is provided (with 889 "perlio" as a "base") which does "read" operations by mmap()ing the 890 file. Performance improvement is marginal on modern systems, so it is 891 mainly there as a proof of concept. It is likely to be unbundled from 892 the core at some point. The "mmap" layer is a reasonable model for a 893 minimalist "derived" layer. 894 895 =item "pending" 896 897 An "internal" derivative of "perlio" which can be used to provide 898 Unread() function for layers which have no buffer or cannot be 899 bothered. (Basically this layer's C<Fill()> pops itself off the stack 900 and so resumes reading from layer below.) 901 902 =item "raw" 903 904 A dummy layer which never exists on the layer stack. Instead when 905 "pushed" it actually pops the stack removing itself, it then calls 906 Binmode function table entry on all the layers in the stack - normally 907 this (via PerlIOBase_binmode) removes any layers which do not have 908 C<PERLIO_K_RAW> bit set. Layers can modify that behaviour by defining 909 their own Binmode entry. 910 911 =item "utf8" 912 913 Another dummy layer. When pushed it pops itself and sets the 914 C<PERLIO_F_UTF8> flag on the layer which was (and now is once more) 915 the top of the stack. 916 917 =back 918 919 In addition F<perlio.c> also provides a number of C<PerlIOBase_xxxx()> 920 functions which are intended to be used in the table slots of classes 921 which do not need to do anything special for a particular method. 922 923 =head2 Extension Layers 924 925 Layers can made available by extension modules. When an unknown layer 926 is encountered the PerlIO code will perform the equivalent of : 927 928 use PerlIO 'layer'; 929 930 Where I<layer> is the unknown layer. F<PerlIO.pm> will then attempt to: 931 932 require PerlIO::layer; 933 934 If after that process the layer is still not defined then the C<open> 935 will fail. 936 937 The following extension layers are bundled with perl: 938 939 =over 4 940 941 =item ":encoding" 942 943 use Encoding; 944 945 makes this layer available, although F<PerlIO.pm> "knows" where to 946 find it. It is an example of a layer which takes an argument as it is 947 called thus: 948 949 open( $fh, "<:encoding(iso-8859-7)", $pathname ); 950 951 =item ":scalar" 952 953 Provides support for reading data from and writing data to a scalar. 954 955 open( $fh, "+<:scalar", \$scalar ); 956 957 When a handle is so opened, then reads get bytes from the string value 958 of I<$scalar>, and writes change the value. In both cases the position 959 in I<$scalar> starts as zero but can be altered via C<seek>, and 960 determined via C<tell>. 961 962 Please note that this layer is implied when calling open() thus: 963 964 open( $fh, "+<", \$scalar ); 965 966 =item ":via" 967 968 Provided to allow layers to be implemented as Perl code. For instance: 969 970 use PerlIO::via::StripHTML; 971 open( my $fh, "<:via(StripHTML)", "index.html" ); 972 973 See L<PerlIO::via> for details. 974 975 =back 976 977 =head1 TODO 978 979 Things that need to be done to improve this document. 980 981 =over 982 983 =item * 984 985 Explain how to make a valid fh without going through open()(i.e. apply 986 a layer). For example if the file is not opened through perl, but we 987 want to get back a fh, like it was opened by Perl. 988 989 How PerlIO_apply_layera fits in, where its docs, was it made public? 990 991 Currently the example could be something like this: 992 993 PerlIO *foo_to_PerlIO(pTHX_ char *mode, ...) 994 { 995 char *mode; /* "w", "r", etc */ 996 const char *layers = ":APR"; /* the layer name */ 997 PerlIO *f = PerlIO_allocate(aTHX); 998 if (!f) { 999 return NULL; 1000 } 1001 1002 PerlIO_apply_layers(aTHX_ f, mode, layers); 1003 1004 if (f) { 1005 PerlIOAPR *st = PerlIOSelf(f, PerlIOAPR); 1006 /* fill in the st struct, as in _open() */ 1007 st->file = file; 1008 PerlIOBase(f)->flags |= PERLIO_F_OPEN; 1009 1010 return f; 1011 } 1012 return NULL; 1013 } 1014 1015 =item * 1016 1017 fix/add the documentation in places marked as XXX. 1018 1019 =item * 1020 1021 The handling of errors by the layer is not specified. e.g. when $! 1022 should be set explicitly, when the error handling should be just 1023 delegated to the top layer. 1024 1025 Probably give some hints on using SETERRNO() or pointers to where they 1026 can be found. 1027 1028 =item * 1029 1030 I think it would help to give some concrete examples to make it easier 1031 to understand the API. Of course I agree that the API has to be 1032 concise, but since there is no second document that is more of a 1033 guide, I think that it'd make it easier to start with the doc which is 1034 an API, but has examples in it in places where things are unclear, to 1035 a person who is not a PerlIO guru (yet). 1036 1037 =back 1038 1039 =cut
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |