实现 ioctl(2) 函数。你可能首先需要说
require "sys/ioctl.ph"; # probably in
# $Config{archlib}/sys/ioctl.ph
以获取正确的函数定义。如果 sys/ioctl.ph 不存在或没有正确的定义,你将不得不自己编写,基于你的 C 头文件,如 <sys/ioctl.h>。(Perl 工具包中有一个名为 h2ph 的 Perl 脚本,可能对你有帮助,但它不是微不足道的。)SCALAR 将根据 FUNCTION 被读取和/或写入;SCALAR 的字符串值的一个 C 指针将作为实际 ioctl
调用的第三个参数传递。(如果 SCALAR 没有字符串值,但有数值,则将传递该值,而不是指向字符串值的指针。为了确保这一点,在使用标量之前向标量添加一个 0
。)可能需要 pack
和 unpack
函数来处理 ioctl
使用的结构的值。
if OS returns: then Perl returns:
-1 undefined value
0 string "0 but true"
anything else that number
因此,Perl 在成功时返回 true,在失败时返回 false,但你仍然可以轻松地确定操作系统返回的实际值
my $retval = ioctl(...) || -1;
printf "System returned %d\n", $retval;
特殊字符串 "0 but true"
不受 Argument "..." isn't numeric
警告 中不正确的数字转换的影响。
可移植性问题:"ioctl" in perlport。