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

MacOS下Xcode开发C程序fopen返回Operation not permitted问题咨询

问题根因

MacOS在Unix文件权限之上额外加了TCC(透明权限控制)层,同时Xcode调试启动的进程权限继承自Xcode本身,仅修改Unix文件权限、关闭App Sandbox无法绕过这两层限制,是EPERM(errno=1,Operation not permitted)报错的核心原因。

分步解决
  • 先确认传入fopen的路径合法性:fopen不会自动解析路径中的~家目录符号,直接传~/test.txt这类路径会触发异常,需要先用getenv("HOME")拼接完整绝对路径,或用wordexp做路径展开后再传入。
  • 确认目标文件位置:~/Desktop、~/Documents、~/Downloads、~/Library、外接存储、iCloud同步目录、网络挂载盘均属于TCC默认受保护目录,这类目录下的文件即使权限设为777,未获得TCC授权的进程也无法读取。
  • 临时调试场景修复:打开系统设置>隐私与安全性>全磁盘访问,将Xcode.app加入允许列表,完全重启Xcode后再运行代码即可。Xcode调试启动的C程序会继承Xcode的TCC权限,单独给编译产物加权限不生效。
  • 沙盒关闭有效性校验:很多场景下仅在Xcode界面关闭App Sandbox未实际生效,打开终端执行以下命令校验编译产物的权限配置:
    codesign -d --entitlements - /path/to/your/compiled/binary
    
    如果输出结果中com.apple.security.app-sandbox值为true,说明沙盒未正确关闭,需要检查对应target的所有构建配置(Debug/Release)下的沙盒开关,不要误改其他扩展target的配置。
  • 硬化运行时权限修复:如果开启了Hardened Runtime(硬化运行时),默认会限制文件系统访问,可在target的Signing & Capabilities配置页,根据实际访问需求添加对应权限:
    • 访问下载目录文件:添加com.apple.security.files.downloads.read-only权限
    • 访问用户主动选择的文件:添加com.apple.security.files.user-selected.read-only权限
      不需要切换到Swift开发,纯C工程可直接调用CoreFoundation接口申请权限、持久化安全范围书签,实现正式版的无弹窗文件访问。
快速验证

将Xcode编译出的二进制直接拖到终端运行,如果终端下可以正常打开文件、Xcode调试时不行,即可确定是Xcode本身未获得TCC全磁盘访问权限导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:15:34