使用 ofstream 打开文件时设置文件权限
Setting file permissions when opening a file with ofstream
C++的标准库(或linux sys/stat.h, sys/types.h, sys/....库)有没有办法设置文件权限使用 ofstream
(或使用这些库中的其他内容)创建文件时的文件?
当我创建一个文件时,它只是使用一些默认的文件权限集创建的(我假设当前的 umask
是什么),但我想明确地将权限设置为默认设置以外的权限(例如 600
),而且我不能在启动程序之前设置 umask(b/c 其他人会 运行 它)。
// Example of creating a file by writing to it
ofstream fp(filename.c_str())
/* write something to it */
有没有办法在 C++ 中执行此操作,如果没有,是否有在 C++ 程序中设置 umask
的方法?
例如,在 C 的标准库中,您 can just do:
open(filename, O_RDWR|O_CREAT, 0666)
但我不想求助于使用 C 函数,因为能够使用与 fstream
objects.
关联的函数会很好
(旁注:有一个 question 的标题正是我要找的,但结果是无关的。)
你不能。标准库必须与平台无关,例如 0600
等权限在 Windows 上毫无意义。如果您想使用特定于平台的功能,则需要使用特定于平台的 APIs。当然,您始终可以在打开文件之前调用 umask()
,但这不是 C++ 标准库的一部分,它是平台 API.
的一部分
注意:open()
也不是 C 标准库的一部分。这是一个平台 API。打开文件的 C 标准库函数是 fopen()
.
在 C++17 中,引入了 std::filesystem::permissions
。它将使您能够以与平台无关的方式获取和设置权限。
获取权限:
using fs = std::filesystem;
bool owner_can_read =
fs::status("my_file.txt").permissions() & fs::perms::owner_read != fs::perms::none;
设置权限(添加所有者和组的所有权限,即在unix上添加模式0x770):
using fs = std::filesystem;
fs::permissions("my_file.txt",
fs::perms::owner_all | fs::perms::group_all,
fs::perm_options::add);
示例基于 cppreference.
中的示例
C++的标准库(或linux sys/stat.h, sys/types.h, sys/....库)有没有办法设置文件权限使用 ofstream
(或使用这些库中的其他内容)创建文件时的文件?
当我创建一个文件时,它只是使用一些默认的文件权限集创建的(我假设当前的 umask
是什么),但我想明确地将权限设置为默认设置以外的权限(例如 600
),而且我不能在启动程序之前设置 umask(b/c 其他人会 运行 它)。
// Example of creating a file by writing to it
ofstream fp(filename.c_str())
/* write something to it */
有没有办法在 C++ 中执行此操作,如果没有,是否有在 C++ 程序中设置 umask
的方法?
例如,在 C 的标准库中,您 can just do:
open(filename, O_RDWR|O_CREAT, 0666)
但我不想求助于使用 C 函数,因为能够使用与 fstream
objects.
(旁注:有一个 question 的标题正是我要找的,但结果是无关的。)
你不能。标准库必须与平台无关,例如 0600
等权限在 Windows 上毫无意义。如果您想使用特定于平台的功能,则需要使用特定于平台的 APIs。当然,您始终可以在打开文件之前调用 umask()
,但这不是 C++ 标准库的一部分,它是平台 API.
注意:open()
也不是 C 标准库的一部分。这是一个平台 API。打开文件的 C 标准库函数是 fopen()
.
在 C++17 中,引入了 std::filesystem::permissions
。它将使您能够以与平台无关的方式获取和设置权限。
获取权限:
using fs = std::filesystem;
bool owner_can_read =
fs::status("my_file.txt").permissions() & fs::perms::owner_read != fs::perms::none;
设置权限(添加所有者和组的所有权限,即在unix上添加模式0x770):
using fs = std::filesystem;
fs::permissions("my_file.txt",
fs::perms::owner_all | fs::perms::group_all,
fs::perm_options::add);
示例基于 cppreference.
中的示例