Как пренебречь umask, чтобы создать файл с заданным разрешением - PullRequest
2 голосов
/ 21 февраля 2012

Я создаю файл, используя функцию открытия и используя 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 with permission -rw-r--r-- . Я хочу, чтобы он был -rw-rw-rw-

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012
    mode_t old_mask;

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

2 голосов
/ 21 февраля 2012

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;   
} 
...