Cómo la llamada al sistema umask() enmascara el permiso

Cómo la llamada al sistema umask() enmascara el permiso

Estoy usando umask()una llamada al sistema para configurar el permiso de archivos. Estoy usando el siguiente código :

umask(S_IWGRP | S_IWOTH);
printf("Enter file name that you want to create:");
scanf(" %s",file);
fd = open(file,O_CREAT|O_WRONLY);

Pero después de ejecutarlo, el archivo se crea con los permisos que se indican a continuación.

--wS-----T 1 rvi rvi     0 Oct  2 15:20 test.txt

¿Para qué sirve este Sbit y Tbit? ¿Y por qué se modifica automáticamente?

Respuesta1

Cuando llamas a open con O_CREAT, espera un tercer argumento para el modo del archivo. Luego, la umask se enmascara del modo que solicita. Así por ejemplo:

umask(S_IWGRP | S_IWOTH /* == 0022 */);
fd = open(file, O_CREAT|O_WRONLY, 0777);

crearía un archivo con los indicadores 0777 y (~0022) = 0755, es decir, rwxr-xr-x, mientras que:

umask(S_IWGRP | S_IWOTH);
fd = open(file, O_CREAT|O_WRONLY, 0666);

crearía un archivo con los indicadores 0666 & (~0022) = 0644, es decir, rw-r--r--. En su caso, debido a que no proporcionó un argumento de modo, la función open toma datos aleatorios de la pila, por lo que lo único que sabe es que los bits enmascarados con umask estarán desactivados. Intente proporcionar el modo que desee a la convocatoria abierta; 0777 es una buena opción para archivos ejecutables y 0666 es buena para archivos no ejecutables.

información relacionada