=encoding iso-8859-1 =head1 NOM perlapio - Interface d'abstraction des E/S internes à Perl =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 Les sources de Perl doivent utiliser les fonctions listées ci-dessus à la place de celles définies dans l'en-tête I de l'ANSI C. Les en-têtes de perl les remplacent par le mécanisme d'entrée-sortie selectionné lors de l'exécution de Configure en utilisant des C<#define>. Ces fonctions sont calquées sur celles de I, mais pour certaines, l'ordre des paramètres a été réorganisé. =over 4 =item B Remplace FILE *. Comme FILE * , il doit être traité comme un type opaque (c'est probablement prudent de le considérer comme un pointeur sur quelque chose). =item B, B, B À utiliser à la place de C, C, C. Elles ressemblent à des «Eappels de fonctionsE» plutôt qu'à des variables pour que ce soit plus facile d'en faire des appels de fonctions si la plate-forme ne peut exporter des données vers des modules chargés, ou si (par exemple) des «EthreadsE» différents peuvent avoir des valeurs différentes. =item B, B Correspondent à fopen()/fdopen() et utilise les mêmes arguments. =item B, B Équivalent à fprintf()/vfprintf() . =item B Équivalent à printf(). printf est #defined à cette fonction, donc il est (pour le moment) légal d'utiliser C dans les sources perl. =item B, B Correspondent à fread () et fwrite (). Attention, les arguments sont différents, Il y a seulement un «EcompteurE» et le fichier f est en premier. =item B =item B, B Correspondent à fputs() et fputc(). Attention, les arguments ont été réorganisés pour que le fichier soit en premier. =item B Correspond à ungetc(). Attention, les arguments ont été réorganisé pour que le fichier soit en premier. =item B Correspond à getc(). =item B Correspond à feof(). =item B Correspond à ferror(). =item B Correspond à fileno(). Attention, sur certaines plates-formes, la définition de «EfilenoE» peut ne pas correspondre à celle d'Unix. =item B Correspond à clearerr(), c.-à-d., retire les drapeaux «EeofE» et «EerrorE» pour le «EfluxE». =item B Correspond à fflush(). =item B Correspond à ftell(). =item B Correspond à fseek(). =item B, B Correspondent à fgetpos() et fsetpos(). Si la plate-forme ne dispose pas de ces fonctions, elles sont implémentées à l'aide de PerlIO_tell() et PerlIO_seek(). =item B Correspond à rewind(). NoteE: elle peut être définie à l'aide de PerlIO_seek(). =item B Correspond à tmpfile(), c.-à-d., retourne un PerlIO anonyme qui sera automatiquement effacé lors de sa fermeture. =back =head2 Co-existence avec stdio Il existe un support de la coexistence de PerlIO avec stdio. Évidemment, si PerlIO est implémenté à l'aide de stdio, il n'y aucun problème. Mais si perlio est implémenté au-dessus de sfio (par exemple) il doit exister des mécanismes permettant de créer un FILE * qui peut être passé aux fonctions de bibliothèques qui utilisent stdio. =over 4 =item B Permet d'obtenir un PerlIO * à partir d'un FILE *. Peut nécessiter plus d'arguments, interface en cours de réécriture. =item B À partir d'un PerlIO * renvoie un FILE * pouvant être donné à du code devant être compilé et linké avec I de l'ANSI C. Le fait qu'un FILE * a été «EexportéE» est enregistré, et peut affecter de futures opérations sur le PerlIO * original. PerlIO *. =item B Retourne un FILE * prédément «EexportéE» (s'il existe). Ceci est un bouche-trou jusqu'à ce que l'interface soit complètement définie. =item B L'appel à PerlIO_releaseFILE informe PerlIO que le FILE * ne sera plus utilisé. Il est alors retiré de la liste des FILE * «EexportéE», et le PerlIO * associé retrouve son comportement normal. =item B Correspond à setlinebuf(). Son utilisation est dépréciée en attendant une décision sur son sort. (Le noyau de Perl l'utilise I lors du dumpE; cela n'a rien à voir avec le vidage automatique $|.) =back En plus de l'API utilisateur décrite précédement, il existe une interface d'«EimplémentationE» qui permet à Perl d'accèder aux structures internes de PerlIO. Les appels suivants correspondent aux diverses macros FILE_xxx déterminées par Configure. Cette section n'a d'intérêt que pour ceux qui sont concerné par un descriptif détaillé de comportement du noyau perl ou qui implémentent un MAPPING PerlIO. =over 4 =item B L'implémentation peut retourner un pointeur vers la position courante dans le «EbufferE» et le nombre d'octets disponibles dans le buffer. =item B Retourne un pointeur vers le prochain octet du buffer à lire. =item B Retourne le nombre d'octets du buffer restant à lire. =item B L'implémentation peut ajuster son idée sur le nombre d'octets dans le buffer. =item B L'implémentation a toutes les interfaces nécessaire pour permetre au code rapide de perl d'utiliser le mécanisme . PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \ PerlIO_canset_cnt(f) && \ `Can set pointer into buffer' =item B Place le pointeur dans le buffer et remplace le nombre d'octets encore dans le buffer. Doit être utilisé seulement pour positionner le pointeur à l'intérieur de la plage impliquée par un appel précédent à C et C. =item B Obscure - force le nombre d'octets dans le buffer. Déprécié. Utilisé uniquement dans doio.c pour forcer un compteur <-1 à -1. Deviendra peut-être PerlIO_set_empty ou similaire. Cet appel peut éventuellement ne rien faire si «EcompteurE» est déduit d'un pointeur et d'une «ElimiteE». =item B L'implémentation a un buffer, et peut retourner un pointeur vers celui-ci ainsi que sa taille. Utilisé par perl pour les tests B<-T> / B<-B>. Les autres usages seraient très obscurs... =item B Retourne le I du buffer. =item B Retourne la I du buffer. =back =head1 TRADUCTION =head2 Version Cette traduction française correspond à la version anglaise distribuée avec perl 5.005_02. Pour en savoir plus concernant ces traductions, consultez L. =head2 Traducteurs Marc Carmier =head2 Relecture Gérard Delafond.