Linux的开放调用的可能原因返回EINVAL(Possible reasons of linux

2019-09-18 04:06发布

我试图做一个系统调用在我的源代码如下。

int file;
file = open(argv[index], O_RDONLY);

当命令行arguement是在我的文件系统的二进制文件的路径。 但这种调用抛出我一个EINVAL错误。 我已经检查文件是否存在以及所需的权限来访问它。

任何建议在什么情况下EINVAL错误将被抛出。

Answer 1:

失败的原因:

有两种方法说(过程1和过程2)是在接近的续集执行,并试图打开这个二进制文件。 由于我的系统(嵌入式设备)将在公开征集之后崩溃,分裂出来的(1)调试不正确的,这让我怀疑的过程-1。 但实际的罪魁祸首是过程-2谁是开放与二进制O_RDWR标志。 但我的文件系统(网络安装)安装为“ 只读文件系统 ”。

点被照顾:

精炼PERROR打印应该是问题,因为的正义事业“ 只读文件系统 ”。 所以,我最初的PERROR描述必须是之前任何一个错误调用的未清除的值。 这里是一个学习是PERROR小心使用,从而避免误导性分析的错误消息。

可能的情况下EINVAL错误将被抛出

公开征集将显示一个EINVAL如果我们使用O_SYNC(或)相关标志的,我们不应该使用的文件。 我断定这个基于先前由雷夫提到的文件上。



Answer 2:

官方文件显示,这是因为你的实现open()不支持同步IO您正在试图打开该文件。



Answer 3:

如果你确信argv[index]实际上包含文件名和O_RDONLY尚未被莫名其妙地覆盖( O_RDONLY应该等于0),通过检查你的系统日志dmesg命令,并确保没有时髦的内核中发生的事情。



文章来源: Possible reasons of linux open call returning EINVAL
标签: c linux