xs文件分析

XS 接口文件以 .xs 为后缀名,里面定义了 Perl 与 C 之间的接口函数。XSUB 是 XS 接口的基本结构单元,通过 xsubpp 编译后,每个 XSUB 都为相应的 C 函数提供了 Perl 与 C 之间的调用接口。该类型文件分为以下部分

头文件、module、package、基本结构单元XSUB。

在对XSUB的OUTPUT和CODE关键字进行理解时费了好大的时间。

OUTPUT指定了返回给Perl脚本的参数,有关RETVAL不用多说,当有多个返回参数时是什么情况呢

举个例子

 这是我们要调用的C函数,perl脚本调用该函数的代码为 

sum为函数plus的返回值,即OUTPTUT指定的RETVAL,但若在函数plus中修改了b的值,我们又需要修改后的结果,此时就可以在OUTPUT中再指定个返回值b。

 理解关键字CODE时,参考网上的说法时该关键字用于对相应的 C 函数做额外的操作处理,这个额外操作属实令我费解,最后通过自己写例子给理解了。

该C函数的形参为一个整型变量,一个整型变量的指针,而要是想在perl脚本中传递两个整型变量来调用此函数就需要“额外操作的处理了”。具体要怎么处理呢?

在XSUB对应该函数的参数类型指定时指定为两个整型变量,然后在CODE中指定对应于C函数参数的类型。在上面的例子中perl脚本调用该函数传递的是两个整型变量,在XSUB中指定该函数对应的参数类型,然后再CODE中将第二个整型变量替换为指针,从而对应了C函数要求的参数类型。

为什么会有额外的操作处理呢?

我理解的是Perl脚本调用函数传的形参类型有限,然后不能一一对应于C语言下的参数类型,然后需要在XS文件的XSUB基本结构单元中进行参数类型的转换,从而得以成功调用C函数。

xs文件,作为Perl的API,有些内置自定义变量类型和一些内置函数,自定义变量比如SV、HV、AV,内置函数比如前缀为 perl_   。

详细说明请参考文档perlguts - Introduction to the Perl API - Perldoc Browser

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值