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) .