如何使用 sys/stat.h 中的 mkdir()
问题:
你想使用 sys/stat.h POSIX 头文件中的 mkdir() 函数,但你不知道 mode_t 参数应该是什么样的。
解决方案
有关详细参考,请参见 Opengroup mkdir 页面
第一个参数应该很明显 - 只需输入你想创建的目录的路径名。如果你使用 std::string(在 C++ 中);使用其 c_str() 成员函数获取 C 字符串。
第二个参数定义新创建目录应具有的权限。此操作指南假设你已经熟悉 Unix 文件权限。如果不熟悉,请阅读相应的 Wikipedia 页面。
首先,决定目录应具有哪些权限。这归结为这 9 个问题:
- 所有者应该能够读/写/执行吗?
- 组应该能够读/写/执行吗?
- 其他所有人(= others)应该能够读/写/执行吗?第二个参数类型为
mode_t,但这基本上只是任何整数类型的别名。
sys/stat.h 提供了几个整数,你可以按位或(|)组合来创建你的 mode_t:
- 用户:
S_IRUSR(读)、S_IWUSR(写)、S_IXUSR(执行) - 组:
S_IRGRP(读)、S_IWGRP(写)、S_IXGRP(执行) - 其他:
S_IROTH(读)、S_IWOTH(写)、S_IXOTH(执行)
此外,还提供了一些快捷方式(基本上是上述的按位或组合
- 读 + 写 + 执行:
S_IRWXU(用户)、S_IRWXG(组)、S_IRWXO(其他) DEFFILEMODE:等同于 0666 = rw-rw-rw-ACCESSPERMS:等同于 0777 = rwxrwxrwx 因此,只给用户 rwx(读+写+执行)权限而组成员和其他人不能做任何事情,你可以等效使用以下任何mkdir()调用:
mkdir_example.c
mkdir("mydir", S_IRUSR | S_IWUSR | S_IXUSR);
mkdir("mydir", S_IRWXU);为了向所有人授予所有权限(模式 0777 = rwxrwxrwx),你可以等效使用以下任何调用:
mkdir_example.cpp
mkdir("mydir", S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH);create_mini_config.sh
cat > mini.config << 'EOF' &&
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_BINFMT_ELF=y
CONFIG_HOSTFS=y
CONFIG_LBD=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_STDERR_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_EXT2_FS=y
CONFIG_MODULES=y
CONFIG_INOTIFY_USER=y
CONFIG_NET=y
CONFIG_UNIX=y
CONFIG_EXT3_FS=m
CONFIG_EXT4_FS=m
EOF
make ARCH=um allnoconfig KCONFIG_ALLCONFIG=mini.config
make ARCH=um -j4 all modulesCheck out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow