我有一个在 AIX 机器中运行的 Perl 脚本。
该脚本尝试从某个目录打开文件,但无法读取该文件,因为文件没有读取权限,但我收到不同的错误消息inappropriate ioctl for device
。
难道不应该说类似的话吗no read permissions for file
或者类似的东西?
这是做什么的inappropriate ioctl for device
留言的意思是?
我该如何修复它?
编辑:这是我发现的strace
。
open("/local/logs/xxx/xxxxServer.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE,
0666) = 4 _llseek(4, 0, [77146], SEEK_END) = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffc14f8) = -1 ENOTTY
(Inappropriate ioctl for device)
答案
这很可能意味着开放没有失败。
当 Perl 打开一个文件时,它会检查该文件是否是 TTY(以便它可以回答-T $fh
filetest 运算符)通过发出TCGETS
ioctl 反对它。ENOTTY
(字符串值:“设备的 ioctl 不合适”)。$!
当它无效时检查它——也就是说,在任何地方其他比系统调用失败后立即进行,因此测试操作的结果代码至关重要。
如果open
实际上确实为你返回了 false,你发现ENOTTY
在$!
那么我会认为这是一个小错误(给出了无用的值$!
)但我也很好奇它是如何发生的。