¿Cómo puedo encontrar los permisos para los sub-directorios de la ruta de archivo en C bajo Linux?

StackOverflow https://stackoverflow.com/questions/4561082

  •  14-10-2019
  •  | 
  •  

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?

¿Fue útil?

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í).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top