Как я могу найти разрешения для подпапок в пути к файлу в C под Linux? - PullRequest
0 голосов
/ 30 декабря 2010

Я пытаюсь найти все подпапки в пути к файлу, которые имеют разрешение «others exec».

Я пытался использовать strtok(path_str,"/") для разрыва строки пути, но при использовании stat() для подкаталогов корневого каталога запускаемого процесса я получаю ошибку «не файл или папка».

Любые предложения о том, как я могу преодолеть эту ошибку?

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Если путь "long/path/to/the/file.txt", вам нужно будет позвонить stat() на "long", "long/path", "long/path/to" и "long/path/to/the". Если вам все равно, в каком порядке вы их проверяете, возможно, самый простой способ - это повторно использовать strrchr():

char *s;

while (s = strrchr(path, '/'))
{
    *s = 0;
    if (strlen(path) > 0)
        stat(path, &statbuf);
    else
        stat("/", &statbuf);

    /* Do something with statbuf */
}

(Специальный регистр предназначен для путей, начинающихся с /, для проверки самого корневого каталога).

0 голосов
/ 02 января 2011

Я это исправил,

Сначала я удалил первый '/' из пути (я не до конца понимаю, почему это так) Затем я изменил код в do-while для доступа к файлу в конце. Так вот весь код:

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, '/')));

Спасибо, кафе и всем за вашу помощь.

...