¿Cómo puedo encontrar los permisos para los sub-directorios de la ruta de archivo en C bajo Linux?
Pregunta
Estoy tratando de encontrar todas las subcarpetas de la ruta de un archivo que tienen 'otros exec' permiso.
He tratado de uso strtok(path_str,"/")
para romper la cadena de ruta, pero cuando se utiliza stat()
de los subdirectorios de la raíz del proceso de corro, me sale el "no es un archivo o una carpeta" error.
¿Alguna sugerencia sobre cómo puedo superar este error?
Solución 2
lo he arreglado,
En primer lugar me quita la primera '/' del camino (no estoy entender completamente por qué es así) De lo que cambió el código en do-while para acceder al archivo al final. Así que aquí está el código completo:
do{
int retval;
if (temp_ptr != NULL) //before the first strrchr its null
*temp_ptr = 0;
if (*temp_path)
retval = stat(temp_path, statbuf);
else
retval = stat("/", statbuf);
if (retval < 0){
perror("stat");
}
printf("%s\n",temp_path);
if(S_ISDIR(statbuf->st_mode)){
printf("\tis a directory\n");
}else if(S_ISREG(statbuf->st_mode)){
printf("\tis a regular file\n");
}
} while ((temp_ptr = strrchr(temp_path, '/')));
Gracias CAF y todos por su ayuda.
Otros consejos
Si la ruta es "long/path/to/the/file.txt"
, a continuación, usted tiene que llamar stat()
en "long"
, "long/path"
, "long/path/to"
y "long/path/to/the"
. Si no le importa en qué orden se comprueba estos, la forma más fácil es probablemente para el uso en varias ocasiones strrchr()
:
char *s;
while (s = strrchr(path, '/'))
{
*s = 0;
if (strlen(path) > 0)
stat(path, &statbuf);
else
stat("/", &statbuf);
/* Do something with statbuf */
}
(El especial-carcasa es para las rutas que comienzan con /
, para comprobar el directorio raíz en sí).