【发布时间】:2013-05-31 21:37:54
【问题描述】:
我是一个 XS 初学者,我正在考虑更改一个现有的 XS 模块,该模块大量使用了 15 年以上的底层 C 库(实际上该模块基本上只是粘到这个库)。问题是我希望能够使用 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 行为中获取伪文件句柄吗?
【问题讨论】: