使用ofstream打开文件时设置文件权限

时间:2015-11-05 18:31:10

标签: c++ linux file-permissions fstream

在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&#39的标准库中can just do

open(filename, O_RDWR|O_CREAT, 0666)

但我不想使用C函数,因为能够使用与fstream对象相关联的函数会很好。

旁注:有一个question,其标题正是我所寻找的,但事实证明它是无关的。

2 个答案:

答案 0 :(得分:7)

你做不到。标准库必须与平台无关,例如,0600等权限在Windows上毫无意义。如果要使用特定于平台的功能,则需要使用特定于平台的API。当然,您可以在打开文件之前随时致电umask(),但这不是C ++标准库的一部分,它是平台API的一部分。

注意:open()也不是C标准库的一部分。它是一个平台API。打开文件的C标准库函数是fopen()

答案 1 :(得分:1)

在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中的示例的示例。

相关问题