我有一个在 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 $fhfiletest 运算符)通过发出TCGETSioctl 反对它。ENOTTY(字符串值:“设备的 ioctl 不合适”)。$!当它无效时检查它——也就是说,在任何地方其他比系统调用失败后立即进行,因此测试操作的结果代码至关重要。

如果open实际上确实为你返回了 false,你发现ENOTTY$!那么我会认为这是一个小错误(给出了无用的值$!)但我也很好奇它是如何发生的。

来自: stackoverflow.com