问题
如何在 XS 函数中支持自动激活的文件句柄参数?
我正在 XS 包装一个返回文件描述符的 C 函数,我想以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
这很好用(tm),但是,我想再次将实现完全移到 XS 中。
到目前为止,我已经尝试过sv_2io
一个类型映射为的参数SV *
,但这会在未定义的标量上引发异常。我没有尝试将第一个参数映射到 a FILE *
orPerlIO *
对象,因为我不知道如何“fdreopen”(如果您愿意的话)这些对象。