如何使用 sys/stat.h 中的 mkdir()

问题:

你想使用 sys/stat.h POSIX 头文件中的 mkdir() 函数,但你不知道 mode_t 参数应该是什么样的。

解决方案

有关详细参考,请参见 Opengroup mkdir 页面

第一个参数应该很明显 - 只需输入你想创建的目录的路径名。如果你使用 std::string(在 C++ 中);使用其 c_str() 成员函数获取 C 字符串。

第二个参数定义新创建目录应具有的权限。此操作指南假设你已经熟悉 Unix 文件权限。如果不熟悉,请阅读相应的 Wikipedia 页面

首先,决定目录应具有哪些权限。这归结为这 9 个问题:

sys/stat.h 提供了几个整数,你可以按位或(|)组合来创建你的 mode_t:

此外,还提供了一些快捷方式(基本上是上述的按位或组合

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 modules

Check out similar posts by category: C/C++