linux open调用返回EINVAL的可能原因

Viv*_*ran 5 c linux

我试图在我的源代码中进行系统调用,如下所示。

int file;
file = open(argv[index], O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

其中命令行参数是我的文件系统中二进制文件的路径。但是这个调用给我带来了一个EINVAL错误。我已检查文件是否存在以及访问该文件所需的权限。

任何关于什么情况下EINVAL错误的建议都会被抛出。

Viv*_*ran 2

失败原因:

有两个进程(process-1 和 process-2)正在连续执行,并试图打开此二进制文件。由于我的系统(嵌入式设备)将在这次公开调用后崩溃,因此分离出来的调试不正确,这让我怀疑 process-1。但真正的罪魁祸首是 process-2,它用 flag 打开二进制文件O_RDWR。但我的文件系统(网络安装)被安装为“只读文件系统”。

应注意的事项:

细化错误打印它应该是问题的正确原因,如“只读文件系统”。所以我最初的错误描述一定是之前任何错误调用的未清除值。这里的一项学习是谨慎使用perror,以避免分析误导性的错误消息。

EINVAL可能会抛出错误的情况

EINVAL如果我们对不应该使用的文件使用 O_SYNC(或)相关标志,则open 调用将显示一个信息。我根据 Rafe 之前提到的文档得出这一结论。