我正在尝试在源代码中进行系统调用,如下所示。
int file;
file = open(argv[index], O_RDONLY);
命令行争论是我文件系统中二进制文件的路径。但是这个电话会引发EINVAL
错误。我已经检查了文件是否存在以及访问它所需的权限。
有关EINVAL
错误将被抛弃的具体情况的任何建议。
答案 0 :(得分:2)
失败原因:
有两个进程说(进程1和进程-2)正在执行紧密续集并试图打开这个二进制文件。由于我的系统(嵌入式设备)在这次打开调用后会崩溃,因此分离出的调试不正确,这让我怀疑进程1。但实际的罪魁祸首是进程2谁用O_RDWR
标志打开二进制文件。但我的文件系统(网络安装)被安装为“只读文件系统”。
需要注意的要点:
优化 perror 打印它应该是问题的正确原因“只读文件系统”。因此,我的初始 perror 描述必须是之前任何错误调用的未清除值。这里学习的是小心使用 perror ,以避免分析误导性错误消息。
EINVAL
错误将被抛弃的可能情况:
如果我们对不应该使用的文件使用O_SYNC(或)相关标志,则打开调用将显示EINVAL
。我的结论基于Rafe先前提到的文档。
答案 1 :(得分:1)
官方文档表明,这是因为open()
的实现不支持您尝试打开的文件的同步IO。
答案 2 :(得分:1)
如果您确定argv[index]
实际上包含文件名且O_RDONLY
未被某种方式覆盖(O_RDONLY
应该等于0),请通过{{1}检查您的系统日志命令并确保在内核中没有发生任何时髦。