讲师中心 微信公众号
AI工具推荐 视频效率加速

c++怎么修改文件的读写权限_permissions函数与perms枚举【详解】

秋涛姑娘_4622

秋涛姑娘_4622

发布时间:2026-03-27 16:41:31

|

831人浏览过

|

来源于php中文网

原创

std::filesystem::permissions() 默认执行 replace 操作,若未指定 perm_options::add/remove 且路径存在权限位不全,会导致意外清空权限;需确保路径存在、正确组合 perms 枚举(用 | 而非整数运算)、按平台语义适配权限位。

c++怎么修改文件的读写权限_permissions函数与perms枚举【详解】

std::filesystem::permissions() 修改文件权限时,为什么 chmod 没反应?

直接调用 std::filesystem::permissions() 失败,多数是因为路径不存在、权限被系统策略拦截,或没指定作用对象。C++17 的 permissions() 不是“设置权限”,而是“修改某路径的权限位”,必须配合 perms 枚举和明确的 perm_options 才能生效。

  • 必须确保路径存在(exists(path) 返回 true),否则抛出 filesystem_error
  • 不加 perm_options::add / remove / replace,默认行为是 replace —— 会清空所有未显式设置的位,比如只写 owner_read,结果组和其他人的所有权限全丢
  • Windows 下仅支持部分权限位(如 owner_read、owner_write),group_exec 或 others_exec 被忽略,且不触发 UAC 提权,所以看似“没反应”
  • Linux/macOS 需要调用进程有对应目录的写权限(即能修改 inode),普通用户无法给其他用户的文件加 setuid

perms 枚举值怎么组合才安全?别硬写数字

perms 是 scoped enum,不能用整数相加,也不能用按位或(|)混用不同作用域的值(比如把 owner_read 和 group_all 直接或)。正确做法是用 operator|(已重载)或 perms{} 初始化列表。

  • 推荐写法:perms::owner_read | perms::owner_write | perms::group_read
  • 错误写法:static_cast<perms>(400 | 200)</perms>(失去类型安全,且跨平台值不一致)
  • perms::all 包含 owner/group/others 的 rwx,但 Windows 不支持执行位,实际等价于 owner_all | group_read | others_read
  • 避免用 perms::mask —— 它只是个占位符,不表示任何真实权限,用于内部过滤

std::filesystem::permissions() 的三个参数分别控制什么?

函数原型是 void permissions(const path& p, perms prms, perm_options opts = perm_options::replace)。第三个参数决定“怎么改”,不是可有可无的默认项。

  • perm_options::replace:完全替换权限(最危险!默认行为,慎用)
  • perm_options::add:只开权限(比如让文件可执行,但不碰读写位)
  • perm_options::remove:只关权限(比如禁止组写入,其他不动)
  • 漏传 opts 就是 replace,常见误操作:想“加执行权”,却写成 permissions(p, perms::owner_exec),结果把读/写全删了

示例(安全添加 owner 执行权):

permissions(p, perms::owner_exec, perm_options::add);

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

立即学习“C++免费学习笔记(深入)”;

chmod 和 std::filesystem::permissions() 权限映射不一致怎么办?

Linux 的 chmod 644 是八进制掩码,而 perms 是符号化枚举,二者不一一对应。比如 644 = rw-r--r--,对应 owner_read | owner_write | group_read | others_read,但没有直接的 perms::from_octal(644)。

  • C++ 标准库不提供八进制转 perms 的工具函数,得自己写解析逻辑(或用第三方库如 Boost.Filesystem)
  • 注意:perms::owner_write 在 Linux 对应八进制 200,但 Windows 下它可能同时影响 “Read-only” 属性(即去掉只读=允许写),和 POSIX 的 write 权限语义不等价
  • 跨平台项目建议统一用符号组合(如 owner_read | owner_write),别依赖八进制字面量,否则 macOS/Linux 行为一致,Windows 可能静默失败

权限这事,表面是改几个 bit,背后牵扯文件系统、OS 策略、用户上下文三重约束。哪怕代码编译通过,permissions() 也可能在运行时静默失效——尤其是目标路径由另一个用户创建,或挂载在 noexec/nosuid 分区上。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2238

2023.09.20

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

636

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

371

2025.11.27

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3259

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2838

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1488

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2599

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3310

2023.08.08

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn