Eu tenho o seguinte código do livro:
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int
main()
{
umask(0);
if(creat("foo",RWRWRW)<0)
err_sys("creat error for foo");
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if(creat("bar",RWRWRW)<0)
err_sys("create error for bar");
exit(0);
}
Em terminal
, primeiro todos os umask
para obter a criação do modo atual:
Eu recebo 0002.
Em seguida, execute este programa. Eu recebo o seguinte:
$ ls -l foo bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 foo
Mas deve ser assim:
$ ls -l foo bar
-rw------- 1 sar 0 Dec 7 21:20 bar
-rw-rw-rw- 1 sar 0 Dec 7 21:20 foo
Então, o que está acontecendo? Por que o umask no meu programa não funciona?