我是一名XS初学者,目前正在研究修改一个使用了15年以上C库的现有XS模块(实际上,该模块基本上只是将这个库粘合在一起)。问题是,我希望能够像下面这样使用PerlIO字符串技巧:
open($fh, '<', \$string);
然后将$fh
传递给期望FILE
的库的XS粘合剂。问题在于XS有:
int
_parse (entry_ref, filename, file, preserve=FALSE)
SV * entry_ref;
char * filename;
FILE * file;
boolean preserve;
我认为它需要是这样的:
PerlIO * file;
当然,这并不起作用,因为其中必须有更多内容。 当我查看库中的_parse
代码时,最终结果如下:
AST * bt_parse_entry (FILE * infile,
char * filename,
btshort options,
boolean * status)
{
AST * entry_ast = NULL;
static int * err_counts = NULL;
static FILE * prev_file = NULL;
现在又涉及到了FILE
类型。我首先要问的基本问题是 - 在不改变库的情况下,我能否通过改变XS来从字符串获取类似于PerlIO行为的伪文件句柄?