以下最小示例定义了一个包装器PerlIO_write
:
MODULE = My::FH PACKAGE = My::FH
INCLUDE: const-xs.inc
int
write_fh (SV* fh, SV* str)
CODE:
STRLEN len
char* buf = SvPV(str, len);
PerlIO* io = IoIFP(sv_2io(fh));
if (io) {
RETVAL = PerlIO_write(io, buf, len);
} else {
croak("cannot use fh as a PerlIO handle");
}
OUTPUT:
RETVAL
write_fh
在使用创建的文件句柄上使用该函数open $fh, '<', \$buf
可以按预期工作。但是,使用以下代码段创建的绑定文件句柄不会转换为 PerlIO 句柄:
my $fh = Symbol::gensym;
tie *$fh, 'My::TIEFH', \$buf;
My::TIEFH
包含所需的方法并按print
$fh $str
预期通过作品对其进行写入。
我需要做什么才能从 XS 土地写入绑定的文件句柄?