4

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

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

命令行参数是我的文件系统中二进制文件的路径。但是这个电话给我一个EINVAL错误。我已经检查了文件的存在以及访问它所需的权限。

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

4

3 回答 3

3

官方文档表明这是因为您的实现open()不支持您尝试打开的文件的同步 IO。

于 2012-06-15T17:01:55.727 回答
2

失败原因:

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

需要注意的点:

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

可能EINVAL会抛出错误的情况:

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

于 2012-06-16T20:00:44.913 回答
1

如果您确定它argv[index]实际上包含文件名并且O_RDONLY没有以某种方式被覆盖(O_RDONLY应该等于 0),请通过dmesg命令检查您的系统日志并确保内核中没有发生任何奇怪的事情。

于 2012-06-15T18:47:19.980 回答