我试图在我的源代码中进行系统调用,如下所示。
int file;
file = open(argv[index], O_RDONLY);
Run Code Online (Sandbox Code Playgroud)
其中命令行参数是我的文件系统中二进制文件的路径。但是这个调用给我带来了一个EINVAL
错误。我已检查文件是否存在以及访问该文件所需的权限。
任何关于什么情况下EINVAL
错误的建议都会被抛出。
失败原因:
有两个进程(process-1 和 process-2)正在连续执行,并试图打开此二进制文件。由于我的系统(嵌入式设备)将在这次公开调用后崩溃,因此分离出来的调试不正确,这让我怀疑 process-1。但真正的罪魁祸首是 process-2,它用 flag 打开二进制文件O_RDWR
。但我的文件系统(网络安装)被安装为“只读文件系统”。
应注意的事项:
细化错误打印它应该是问题的正确原因,如“只读文件系统”。所以我最初的错误描述一定是之前任何错误调用的未清除值。这里的一项学习是谨慎使用perror,以避免分析误导性的错误消息。
EINVAL
可能会抛出错误的情况:
EINVAL
如果我们对不应该使用的文件使用 O_SYNC(或)相关标志,则open 调用将显示一个信息。我根据 Rafe 之前提到的文档得出这一结论。