martes, 9 de marzo de 2010

sys_umask

Prototipo:
mode_t umask(mode_t mask);

Donde:
mask:
-Opera a nivel de bit.
-Valor por defecto 022.
Valor de retorno: valor de la máscara anterior.

Descripción:
Establece una máscara de los permisos dados a un archivo en el momento de su creación.

La máscara actúa sobre los permisos dados con la llamada al sistema creat “creat(char *path, mode_t mode)” y con la llamada al sietema open “open(char *path, int flag [,mode_t mode])”, con la cuál sólo tiene significado cuando está activo el bit O_CREATE, de tal modo que los permisos que realmente se asignan al nuevo archivo estan dados por: ~mask & mode

Ejemplo:

int main (int argc, char *argv[])
{
int fd; /*descriptor de archivo*/
mode_t premask; /*mascara previa*/

premask = umask(0); /*cambia la mascara a 000*/
printf("Mascara inicial %03o\n",premask);

fd = open("ejemplo.txt",O_WRONLY|O_CREAT,0444);
premask = umask(premask);/*retorna al valor anterior de la mascara*/
printf("Mascara final %03o\n",premask);

close (fd);
}

~(000)&(444) = ~(000 000 000) & (100 100 100)
= (111 111 111) & (100 100 100)
= 100 100 100
= r-- r-- r--
= 4 4 4


Salida del programa:
cespinosa@debian:~$ ./ejemplo
Mascara inicial 022
Mascara final 000
cespinosa@debian:~$ ls -l ejemplo.txt
-r--r--r-- 1 cespinosa cespinosa 0 2010-03-05 02:44 ejemplo.txt


Referencias:
http://sopa.dis.ulpgc.es/ii-dso/lecminix/fs/protect/protect.pdf
http://manpages.ubuntu.com/manpages/hardy/es/man2/umask.2.html
http://books.google.com.mx/books?id=wXzwFPaVku0C&pg=PA224&lpg=PA224&dq=llamada+al+sistema+umask&source=bl&ots=yzhktVo38r&sig=AC-6uudO8Fd_QVajlgxm7C7oT04&hl=es&ei=IBCVS4XDGpDoM6Ci1ZQN&sa=X&oi=book_result&ct=result&resnum=4&ved=0CBUQ6AEwAzgK#v=onepage&q=llamada%20al%20sistema%20umask&f=false

No hay comentarios:

Publicar un comentario