主要观点:通过调用chmod(2)
设置文件权限(文件模式),chmod(1)
命令行有多种设置权限的方式,但底层系统调用需要int
,C 头文件使用起来较麻烦,于是用 C++机制使其更易用。
关键信息:
chmod
的 C 接口需路径名和模式,有符号常量如S_IRUSR
等。- 常以八进制思考文件模式,如“755 用于可执行文件”等,但 C 源中八进制形式较繁琐。
ls -l
输出的文件权限用 10 个字符表示,前 9 个字符分别表示当前用户、组、其他用户的读、写、执行权限。- 编写 C++函数将文本形式的 9 字符模式转换为
mode_t
值,还可写成consteval
函数在编译时计算,进而将其变成用户定义字面量,如chmod("example.txt", "rw-r--r--"_mode)
。 - 在 Qt 中,
QFileDevice::Permission
的值是十六进制但看起来像八进制,导致更易混淆。 - 通过模板和类型命名可改善现有错误消息,如在 C++中使用合适的模板函数可明确指出错误位置和字符。
重要细节:
- 定义用户定义字面量
_mode
的函数,检查字符串长度是否为 9,否则抛出异常。 - 实现将字符串转换为
mode_t
的函数,通过多个expected_character_at_position
模板函数检查每个位置的字符是否符合要求,不符合则抛出异常。 - 不同编译器(如 Clang 17、GCC 13)的错误消息形式类似,都能指出错误位置和字符。
- 代码可在个人 GitHub 仓库的
playground
子目录mode/
中找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。