=encoding euc-jp =head1 NAME perlapio - 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 Perl のソースコードでは、ANSI C の I にある関数ではなく 上記の関数を使うべきであり、I が Configure の実行時に選択した I/O 機構へ C<#define> します。 これらの関数は I にあるものがモデルになっていますが、 それに渡すパラメーターは“ちょっとばかし整頓”されています。 =over 4 =item B これは FILE * と似たものではありますが、FILE * と異なるのはこれが 不透明なものであるように扱うべきだということです (これが何かに対するポインターであると仮定するのが安全でしょう)。 =item B, B, B C, C, C の代わりに使ってください。 これらは変数でなく“関数呼び出し”のように記述されていますが、 これは使用するプラットフォームにおいてロードモジュールに対するデータの エクスポートができなかったり、あるいは異なる“スレッド”が異なる値を 持つ可能性があるといったときに、これらをB<関数呼び出しにする>のが 簡単になるからです。 =item B, B 対応する fopen()/fdopen() と同じ引数を取ります。 =item B, B fprintf()/vfprintf() と等価です。 =item B これは printf() と等価です。printf はこの関数に対する #define となっていますから、 (現時点では) Perl のソースコード中で C とすることは合法です。 =item B, B fread() および fwrite() に対応します。これらの引数がそれとは異なり、 “count”は一つだけしかなくて“file”が先頭であるということに 注意してください。 =item B =item B, B fputs() および fputc() に対応します。最初の引数に“file”が来るということに 注意してください。 =item B ungetc() に対応します。最初の引数に“file”が来るということに注意してください。 =item B getc() に対応します。 =item B feof() に対応します。 =item B ferror()に対応します。 =item B fileno() に対応します。一部のプラットフォームにおいては、“fileno”の 意味するところがUNIXとは違うということに注意してください。 =item B clearerr() に対応し、“ストリーム”の`eof'や`error'といったフラグを クリアします。 =item B fflush() に対応します。 =item B ftell() に対応します。 =item B fseek() に対応します。 =item B, B それぞれ ftgetpos() と fsetpos() に対応します。 プラットフォームが stdio 呼び出しを持っていない場合にはこれらの関数は PerlIO_tell()、PerlIO_seek() によって実装されます。 =item B rewind() に対応します。一部の状況においてはこれは PerlIO_seek() によって 再定義されている可能性があるので注意してください。 =item B tmpfile() に対応し、クローズ時に自動的に削除される無名 PerlIO を返します。 =back =head2 Co-existence with stdio (stdio との共存) =begin original 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. =end original PerlIO と stdio との共存をサポートするためのアウトラインがあります。 PerlIO が stdio を使って実装されているのであれば、問題はありません。 しかし、perlio が sfio の上に実装されているのであれば stdio 呼び出しを 使おうとするライブラリコードに渡すことができる FILE * を作成する機構が なければなりません。 =over 4 =item B =begin original Used to get a PerlIO * from a FILE *. May need additional arguments, interface under review. =end original FILE * から PerlIO * を得るのに使います。 追加の引数やインタフェースのレビューが必要です。 =item B PerlIO * を取り、ANSI C の I のルーチンに渡して使われる ‘ネイティブ’な FILE * 構造体を返します。 ‘export’された FILE * は記録され、それ以後のオリジナルの PerlIO * に対する PerlIO 操作に影響を及ぼす可能性があります。 =item B 直前の`export'された FILE * を(もしあれば)返します。インターフェースが 完全に定義されるまではこれはプレースホルダーです。 =item B PerlIO_releaseFILE は、PerlIO にすべてのFILE * の使用が完了したことを知らせます。 完了したものは‘export’された FILE * のリストから削除されます。 そして、それに結び付けられている PerlIO * は元々の振る舞いに戻ります。 =item B これは setlinebuf() に対応します。これを使うことは現時点では避けてください。 (Perl core は“dumping”が $| の自動フラッシュに関係していないB<ときにのみ> これを使います)。 =back =begin original 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. =end original 上述したユーザー API に加えて、perl が PerlIO の内部で扱うことが できるようにする「実装」インターフェースがあります。 以下に挙げる呼び出しは、それぞれ Configure で定義される FILE_xxx マクロに 対応しています。 このセクションでは、perl-core の振る舞いや PerlIO のマッピングの 詳細についてのみ注目します。 =over 4 =item B “バッファ”中のカレントポジションへのポインターとバッファにある バイト数を返すことのできる実装です。 =item B バッファ中にある次の読み出し可能バイトへのポインターを返します。 =item B バッファ中の読み出すことのできるバイト数を返します。 =item B バッファにあるバイト数を調整することのできる実装です。 =item B 機構を取り扱うための perl の fast code を許すのに要求される インターフェースのすべてを実装しています。 PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \ PerlIO_canset_cnt(f) && \ `Can set pointer into buffer' =item B ポインターをバッファにセットし、バッファにあるバイト数はそのままです。 以前の C と C の呼び出しから 推測される範囲内のポインターをセットすることのみに使うべきでしょう。 =item B 不明瞭 - バッファにあるバイト数をセットします。使うのはお薦めできません。 現在これは、doio.c でのみ count < -1 を 強制的に -1 にするために使われています。 おそらく PerlIO_set_empty やそれに類するものがあるべきでしょう。 この呼び出しは、“count”がポインターと“limit”から導き出される場合には 実際にはなにもしません。 =item B バッファを持っていて、バッファ全体へのポインターやその大きさを 返すことができる実装です。 B<-T>/B<-B>テストのためにperlによって使われます。 そのほかのものは非常にはっきりしない形で使われます… =item B バッファのB<開始位置>を返します。 =item B バッファのB<トータルサイズ>を返します。 =back =begin meta Translate: KIMURA Koichi (5.005_03) Update: Kentaro Shirakata (5.6.1-) =end meta