加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使旧的库与Perl XS和PerlIO一起使用

发布时间:2020-12-15 21:50:43 所属栏目:大数据 来源:网络整理
导读:我是一个XS初学者,我正在考虑更改现有的XS模块,该模块大量使用15年历史的底层C库(实际上该模块基本上只是这个库的粘合剂).问题是我希望能够使用PerlIO字符串技巧: open($fh,'',$string); 然后将$fh传递给库需要FILE的XS胶水.问题是XS有: int_parse (entry
我是一个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行为中获取伪文件句柄吗?

解决方法

Perl API提供了 PerlIO_exportFILE()( Implementation),它可以将带有文件描述符的PerlIO句柄转换为stdio FILE指针.由于 PerlIO::Scalar是没有文件描述符的“内存中”文件句柄,因此转换无法成功.传递PerlIO :: Scalar句柄的唯一可移植方法是将其刷新到临时文件.使用支持回调的stdio的可移植性较差,如BSD实现,funopen(3).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读