加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux打开调用返回EINVAL的可能原因

发布时间:2020-12-13 23:03:11 所属栏目:Linux 来源:网络整理
导读:我试图在我的源代码中进行系统调用,如下所示. int file;file = open(argv[index],O_RDONLY); 命令行争论是我文件系统中二进制文件的路径.但这个电话会引发一个EINVAL错误.我检查了文件是否存在以及访问它所需的权限. 有关EINVAL错误将被抛弃的任何建议. 解决
我试图在我的源代码中进行系统调用,如下所示.

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

命令行争论是我文件系统中二进制文件的路径.但这个电话会引发一个EINVAL错误.我检查了文件是否存在以及访问它所需的权限.

有关EINVAL错误将被抛弃的任何建议.

解决方法

失败的原因:

有两个进程说(进程1和进程-2)正在执行紧密续集并试图打开这个二进制文件.由于我的系统(嵌入式设备)在这次打开调用后会崩溃,因此分离出的调试不正确,这让我怀疑进程1.但实际的罪魁祸首是进程2谁用O_RDWR标志打开二进制文件.但我的文件系统(网络安装)被安装为“只读文件系统”.

需要注意的要点:

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

可能出现EINVAL错误的情况:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读