質問
XS 関数で自動有効化されたファイルハンドル引数をサポートするにはどうすればよいですか?
私はファイル記述子を返す C 関数を XS ラップしています。そのファイル記述子をopen()の方法でperl ファイルハンドル引数として提示したいと思います。例えば、
myfunc(my $fh) or die "Error: $!";
do_something_with_fh($fh);
これまでに行ったこと
現在、XS 関数の上に perl ラッパーを使用しています。
# -- in perl
sub myfunc {
my $fd = _myfunc();
return open($_[0], '+<&=', $fd) if defined($fd);
}
/* -- in XS */
SysRet
_myfunc()
CODE:
RETVAL = some_c_function_returning_an_fd();
OUTPUT:
RETVAL
これは Just Fine (tm) で動作しますが、ここでも、実装を完全に XS に移行したいと考えています。
これまでのところsv_2io
、 として型マップされた引数を試してみましたSV *
が、未定義のスカラーで例外がスローされます。最初の引数をFILE *
orPerlIO *
オブジェクトにマッピングしようとはしていません。なぜなら、これらのオブジェクトを "fdreopen" する方法がわからないからです。