Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/41: Рейтинг темы: голосов - 41, средняя оценка - 4.73
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
1

Рекурсивный обход директорий

04.04.2011, 11:33. Показов 8481. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане!
Помогите, пожалуйста, в дописании программы в ОС Linux...

Задание: через аргумент командной строки (argv) задаётся директория, в которой рекурсивно введётся поиск среди вложенных папок. Если аргумент не был задан явно, то по умолчанию поиск введётся в текущей директории.
Нужно найти и вывести папку, содержащую наибольшее количество символических ссылок.

Саму функцию я написал, а вот с рекурсией возникли проблемы...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
 
int symlinks_count(const char* path, int* answer) {
    DIR *current = opendir(path);
    if (current == NULL) {
        return -1;
    }
    int count = 0;
    struct dirent* entry;
    while (entry = readdir(current)) {
        if (entry->d_type == DT_LNK) {
            count++;
        }
        if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) {
            fprintf(stdout, "%s\n", entry->d_name);
            symlinks_count(entry->d_name, answer);
        }
    }
    closedir(current);
    if (*answer < count) {
        *answer = count;
    }
    return 0;
} 
    
int main(int argc, char* argv[]) {
    if (argc > 2) {
        fprintf(stderr, "Usage: %s <DIRECTORY>\n", argv[0]);
        return 1;
    }
    int result = 0;
    symlinks_count(argc == 1 ? "." : argv[1], &result);
    fprintf(stdout, "%d\n", result);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2011, 11:33
Ответы с готовыми решениями:

Обход директорий
Вот хочу сделать рекурсивный обход директорий, написал код,подскажите что нужно исправить или...

Рекурсивный обход директорий
Уважаемые Гуру, требуется ваша помошь. Мне необходимо реализовать рекурсивный обход...

Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов
Задание простое, ну по крайней мере на первый взгляд. Написать скрипт обхода вложенных директорий с...

Рекурсивный перебор директорий сервера
Всем доброго времени суток уважаемые форумчане, недавно начал изучение языка C# Вот уже несколько...

3
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.04.2011, 12:28 2
Цитата Сообщение от yanyk1n Посмотреть сообщение
с рекурсией возникли проблемы
какие проблемы? телепаты в отпуске.
0
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
04.04.2011, 12:35  [ТС] 3
niXman, проблема в том, что функция отказывается работать на вложенных папках, когда я явно указал проход по ним в цикле. 20-я строка печатает все папки (чисто для проверки), но в них функция не стала работать...
Собственно, мне нужна помощь по правильному построению рекурсии...
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.04.2011, 16:11 4
вы отдаете в свою рекурсивную функцию имя, а не путь, соответственно на if (current == NULL) все и заканчивается.

PS: где то месячник opendir() начался? 4й вопрос за неделю...
0
04.04.2011, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2011, 16:11
Помогаю со студенческими работами здесь

Обход директорий, QDir
Доброго времени суток, форумчане. Пишу программу в ubuntu, необходимо вывести список процессов....

Не получается обход некоторых директорий
Нужно обойти этот список папок private static readonly List&lt;string&gt; Dir = new List&lt;string&gt; { ...

Рекурсивный обход реестра
Вообщем сижу я тут и думаю как обойьт рекурсивно весь реестр (все ветки) вроде дело в гору а всеже...

рекурсивный обход и удаление
в checkedlistbox вывел все папки и файлы.как удалить все выбранные файлы и папки(вместе с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru