unix 如何忽略umask以便在给定权限下创建文件

pgx2nnw8  于 12个月前  发布在  Unix
关注(0)|答案(3)|浏览(119)

我正在使用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-

du7egjpx

du7egjpx1#

mode_t old_mask;

old_mask = umask(011);
open( ... );
umask(old_mask);

字符串

y53ybaqx

y53ybaqx2#

umask表示默认情况下您不希望给予给文件的权限。因此,如果您想在创建文件时完全控制权限,请将umask设置为0,这表示操作系统不保留任何权限,并允许您调用快照。如下所示:

int main()
{
    mode_t oldmask = umask(0);
    int fd = open("C:\\Users\\Ritesh\\Music\\music.txt", O_CREAT | O_EXCL, 0666);
    close(fd);
    umask(oldmask);
    getch();
    return 0;   
}

字符串

xfyts7mz

xfyts7mz3#

  • 唯一 * 的线程安全的方式来设置文件权限,就是在创建文件后使用chmod()fchmod()显式地设置它们(不带错误检查的示例):
int fd = open("C:\\Users\\Ritesh\\Music\\music.txt", O_CREAT | O_EXCL, 0666);
fchmod(fd, 0666 );

字符串
如果您使用umask(),您将更改整个进程的umask值。如果任何其他线程正在运行,您可能会冒着使用意外权限创建文件的风险,这可能会导致安全问题或其他问题。并且在更改的umask值生效时创建的任何子进程都将使用意外的umask值创建。

相关问题