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 S
bit y T
bit? ¿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.