我的 sysopen 失败:
sysopen(DEV, "/dev/ttyS0", O_NONBLOCK|O_RDONLY)
返回1,表示成功!那么,为什么 $!有错误“非法搜索”(在调用之前它是 undef )
before sysopen $!:
after sysopen $!: Illegal seek
编辑:
这是完整的脚本:(使用实际的 O_NONBLOCK|O_RDONLY 值 2048)
#!/usr/bin/perl -w
use Device::SerialPort;
my $ob;
$ob = new Device::SerialPort("/dev/ttyS0");
print $!, "\n";
$! = 0;
my $ret = sysopen(DEV, "/dev/ttyS0", 2048);
print $!, "\n";
$! = 0;
print "ret from sysopen: ", $ret, "\n";
#my $dev = <DEV>;
打印出来:
./文件句柄.pl
非法搜索
非法搜索
从 sysopen 返回:1
最佳答案
这就是 C errno
变量的工作原理。引用 man errno
:
$!
只是 Perl 的 errno
接口(interface),并且有 same behavior :
您必须检查 sysopen
的返回值以确定它是否失败。如果失败,$!
会告诉你失败的原因,但你不能使用 $!
来确定它是否失败(除非你使用的特定函数被记录为在成功时将 $!
设置为 0。大多数不会,包括 sysopen
)。
关于perl - 为什么 Perl 的 sysopen 报告成功但 $!有错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3893019/