A função umask é uma função do kernel?

0

Eu assumi que a função umask() é uma:

shell function containing a variable commonly referred to as file creation mask

mas eu estava errado porque umask() não é uma função de shell e não contém essa variável.

Se a função umask() não é uma "função de shell", é verdade que se trata de uma "função de kernel"?

    
por JohnDoea 23.11.2018 / 10:45

2 respostas

1

Não existe uma "função de kernel", a menos que você queira this .

umask (2) é uma chamada de sistema . E foi assim desde o início dos tempos [1].

Mas não tem que ser assim - você pode implementá-lo fazendo com que o bitmask real seja parte de um pedaço de memória que é sempre mapeado no mesmo endereço e preservado através do execve (2), e tenha a abertura (2), creat (2), etc., os wrappers userland pegam a partir daí. Isso seria apenas como compatível com POSIX.

[1] na implementação original, o campo u.u_cmask que a função define só é usado em um único lugar em outro lugar - no "Criar um novo arquivo" maknode () .

    
por 23.11.2018 / 22:45
2

O manual para umask diz:

A child process created via fork(2) inherits its parent's umask. The umask is left unchanged by execve(2).

Portanto, porque ele persiste após uma chamada para exec (execve), ele deve ser implementado no kernel, pois todas as chamadas exec substituem o programa em execução (exceto algumas estruturas armazenadas no kernel).

    
por 23.11.2018 / 11:08

Tags