Ao gravar um arquivo, as permissões são apenas para gravação

0

Eu abri um arquivo em C e o escrevi com este código:

int fd = open("soandso.txt", O_RDWR | O_CREAT);
write(fd, buf_of_data, 3);

O arquivo agora tem permissão de gravação somente para mim e não é o que eu especifiquei em aberto. O que estou fazendo errado?

    
por Mark Yisri 22.09.2016 / 14:31

1 resposta

1

As permissões de criação de arquivo são modificadas pelo valor umask .

Então, por exemplo:

$ umask
0022
$ touch xyz
$ ls -l xyz
-rw-r--r-- 1 sweh sweh 0 Sep 22 08:37 xyz

O valor de umask corresponde ao padrão padrão rwx e, portanto, um valor de 0022 remove ----w--w- permissões do arquivo recém-criado.

Podemos mudar isso:

$ umask 002
$ touch abc
$ ls -l abc
-rw-rw-r-- 1 sweh sweh 0 Sep 22 08:38 abc

Agora a máscara 002 remove apenas -------w-

Para criar arquivos sem mascaramento

$ umask 0
$ touch def
$ ls -l def
-rw-rw-rw- 1 sweh sweh 0 Sep 22 08:40 def

Se você quiser que seu programa ignore o valor umask , você deve chamar explicitamente a função umask(2) antes de chamar open(2)

Observe que ao usar open(2) com o O_CREAT flag, você também deve passar uma permissão mode . eg

open("myfile",O_CREAT|O_RDWR,0666);

Nesse caso, o campo de modo também é modificado por meio do valor umask , de modo que o modo real da criação é (mode & ~umask) .

    
por 22.09.2016 / 14:41