我的 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/

10-11 01:30