我正在使用open函数和O_CREAT创建文件|O_EXCEL .我已经传递了模式为“0666”.但通过屏蔽最终分配给它的权限是-rw-r--r--而不是-rw-rw-rw- .有人告诉我,我可以使用umask(011),然后重新设置原始掩码.但我不知道如何在c++程序中传递这个.这是我正在做的一小段.
# include <iostream>
# include <stdio.h>
# include <conio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main()
{
int fd = open("C:\\Users\\Ritesh\\Music\\music.txt", O_CREAT | O_EXCL, 0666);
getch();
return 0;
}
字符串
创建文件C:\Users\Ritesh\Music\music.txt
与权限-rw-r--r-- .
我希望它是-rw-rw-rw-
3条答案
按热度按时间du7egjpx1#
字符串
y53ybaqx2#
umask表示默认情况下您不希望给予给文件的权限。因此,如果您想在创建文件时完全控制权限,请将umask设置为0,这表示操作系统不保留任何权限,并允许您调用快照。如下所示:
字符串
xfyts7mz3#
chmod()
或fchmod()
显式地设置它们(不带错误检查的示例):字符串
如果您使用
umask()
,您将更改整个进程的umask
值。如果任何其他线程正在运行,您可能会冒着使用意外权限创建文件的风险,这可能会导致安全问题或其他问题。并且在更改的umask
值生效时创建的任何子进程都将使用意外的umask
值创建。