You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统Unix环境下调用open函数读写文件报Permission denied错误如何解决?

报错原因
  • 工作目录权限不足:Linux系统中要在某个目录下创建、修改文件,当前运行程序的用户必须同时拥有该目录的写权限(w)和执行权限(x)。如果程序是在/root、/sys、/proc这类系统专属目录,或者所属用户为其他用户的受限目录下运行,就会触发权限拒绝。
  • 同名文件已存在且无访问权限:如果运行路径下已经存在名为newfile.txt的文件,该文件的所有者不是当前用户,且未给当前用户开放读写权限,哪怕你代码中加了O_CREAT、O_TRUNC标记也无法修改已有文件的访问权限,依旧会报错。
  • 安全模块限制:Ubuntu默认开启的AppArmor,或者手动配置的SELinux规则如果限制了程序的文件访问权限,也会触发该报错。
  • 文件路径配置错误:如果代码中实际写的是带前缀的绝对路径,指向了无权限访问的目录,也会出现权限错误。
解决方法
  • 先验证目录权限:在程序运行的目录下手动执行touch test.txt && echo 1 > test.txt,如果手动操作也报错,说明是目录权限问题。执行ls -ld .查看当前目录的权限配置,要么把程序移动到当前用户的家目录(~/)下运行,要么执行sudo chmod u+wx 当前目录路径给当前用户开放目录的写和执行权限。
  • 清理同名文件:执行ls -l newfile.txt检查是否已有同名文件,存在的话可以执行sudo rm -f newfile.txt删除后再运行程序,或者执行sudo chown 当前用户名 newfile.txt && sudo chmod u+rw newfile.txt给当前用户开放文件的读写权限。
  • 排查安全规则:可以临时关闭AppArmor对应程序的规则测试,确认是否是安全模块拦截了文件访问请求。
  • 代码优化:把perror("fd error\n");中的换行符去掉,perror本身会自动拼接系统错误描述,去掉换行后能看到更精准的错误提示。

内容的提问来源于stack exchange,提问作者lst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:39:02