¿Cómo establecemos, reiniciamos y verificamos el "bit adhesivo" desde un programa en C?Manipulación de "bit adhesivo" dentro de un programa C
Gracias
¿Cómo establecemos, reiniciamos y verificamos el "bit adhesivo" desde un programa en C?Manipulación de "bit adhesivo" dentro de un programa C
Gracias
Para leer el sticky bit se utiliza stat()
verificación de la .st_mode
para S_ISVTX
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
struct stat file_stats;
stat("my_file", &file_stats);
if (file_stats.st_mode & S_ISVTX)
printf("sticky\n");
para restablecerla, lo haces a través de chmod
struct stat file_stats;
stat("my_file", &file_stats);
mode_t new_mode = file_stats.st_mode & ~S_ISVTX;
chmod("my_file", new_mode);
para configurarlo, chmod
es
struct stat file_stats;
stat("my_file", &file_stats);
mode_t new_mode = file_stats.st_mode | S_ISVTX;
chmod("my_file", new_mode);
th el código no está probado.
Es poco 01000 (octal), lo que puede establecer con chmod(dir, 01000 | perms)
. Estoy seguro de que si hojeas los encabezados, tal vez stat.h, encontrarás el nombre correcto para el bit.
Eche un vistazo a stat (2) - por ejemplo http://linux.die.net/man/2/stat el nombre es 'S_ISVTX' –
@mru: En efecto, y también es parte del [estándar POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html). – Nemo
@jcomeau: El interlocutor también preguntó cómo "verificar" el bit, por lo que también es posible que desee mencionar 'stat' o' fstat'. – Nemo
Estrictamente hablando, esto también intenta establecer los bits del "tipo de archivo" usando 'chmod', que creo que no está permitido ... También tenga en cuenta que este código es picante; p.ej. si su archivo se elimina y reemplaza entre la llamada a 'stat()' y la llamada a 'chmod()'. (Una razón por la cual 'fstat' y' fchmod' son probablemente mejores; el otro es el rendimiento ...) – Nemo
¿Estás seguro de que chmod intenta establecer los bits del "tipo de archivo", sean lo que sean? Además, si está revisando el archivo que se borra entre las llamadas, también debe verificar la fusión nuclear entre las llamadas. –
El campo 'st_mode' de' struct stat' incluye los bits de "tipo de archivo" (archivo común frente a directorio frente a socket, etc.) además de los permisos. Y no puede configurar esos con 'chmod', por lo que es posible obtener un error si lo intenta. Y si no cree que valga la pena preocuparse por las condiciones de carrera que implican la creación/eliminación de archivos en Unix, tengo algunos avisos CERT para mostrarle ... – Nemo