2011-07-09 15 views

Respuesta

10

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.

páginas man: stat(2)chmod(2)

+0

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

+0

¿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. –

+0

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

1

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.

+1

Eche un vistazo a stat (2) - por ejemplo http://linux.die.net/man/2/stat el nombre es 'S_ISVTX' –

+0

@mru: En efecto, y también es parte del [estándar POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html). – Nemo

+1

@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

Cuestiones relacionadas