我有一个在AIX框中运行的Perl脚本。
该脚本尝试从某个目录打开一个文件,它无法读取该文件,因为文件没有读取权限,但我得到一个不同的错误,说不适当的ioctl设备。
应该不应该说类似没有文件的读取权限或类似的东西?
这不适当的ioctl设备消息是什么意思?
我该如何解决?
编辑:这是我发现,当我做strace。
open("/local/logs/xxx/xxxxServer.log",O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE,0666) = 4 _llseek(4,[77146],SEEK_END) = 0 ioctl(4,SNDCTL_TMR_TIMEBASE or TCGETS,0xbffc14f8) = -1 ENOTTY (Inappropriate ioctl for device)
解决方法
很可能这意味着开放没有失败。
当Perl打开一个文件时,它通过对其发出TCGETS ioctl来检查该文件是否是TTY(以便它可以回答-T $ fh filetest操作符)。如果文件是常规文件而不是tty,则ioctl将失败,并将errno设置为ENOTTY(字符串值:“设备不适当ioctl”)。正如ysth所说,在$中看到意想不到的价值的最常见的原因!正在检查它,当它是无效的 – 也就是说,除了紧接在系统调用失败之后的任何地方,因此测试操作的结果代码是至关重要的。
如果open实际上返回false为你,你发现ENOTTY在$!那么我会认为这是一个小bug(给出一个无用的价值$!),但我也很好奇它是如何发生的。代码和/或桁架输出将是漂亮的。