CHMOD EN LINUX

ban
29 de Agosto del 2003
Necesito hacer un programa en C que imite el comportamiento del comando chmod de linux, utilizando la llamada al sistema chmod, sin utilizar system.
Gracias

chuidiang
29 de Agosto del 2003
No se si te sirve, pero en C de unix tienes una funcion chmod (char *fichero, mode_t modo)

Se bueno

chuidiang
29 de Agosto del 2003
chmod lleva el fichero y el modo como parametros.
El fichero es facil, una cadena de caracteres con el nombre del fichero, por ejemplo
chmod ("/users/yo/fichero.txt", ...)

El modo es un entero en el que cada bit significa una cosa. Los tres bits menos significativos son los permisos para "others", los tres siguientes para el "grupo", los tres siguientes para el "propietario". Hay dos mas, pero explicar para que sirven es un poco mas largo.

La forma facil de componer este entero es en octal. En C cualquier numero que empices por cero se considera octal. Por ejemplo

int a = 033; // Esto es un 33 octal, que es 27 decimal
printf ("%d", 033); // Escribe en pantalla un 27

En octal cada cifra son 3 bits y asi, un numero octal estilo 0ABC, la C coincide con los permisos para others, la B para el grupo y la A para el propietario.

Si la cifra es 4 (100 en binario), hay solo permiso de lectura
Si la cifra es 2 (010 en binario), hay permiso de escritura
Si la cifra es 1 (001 en binario), hay permiso de ejecucion.
Y cualquier combinacion de ellas que se te ocurra, por ejemplo 6 (110 en binario) da permisos de lectura y escritura, pero no de ejecución.

Y ya por fin, un ejemplo:

chmod ("/users/yo/fichero.txt", 0764);

hace que:
Propietario -> Permiso para todo, el 7
Grupo -> Lectura y escritura, el 6 (110 en binario)
Otros -> Solo lectura (100 en binario)

Espero que hayas entendido este pequeño rollo. Recuerda que es importante poner un 0 delante de la cifra para que se interprete en octal.

Se bueno.