imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 22.05.2003, 14:13     # 1
andryas
Guest
 
Сообщения: n/a

Заполнение массива именами файлов на Си в Unix

Я недавно перешел на програмирование в Unix, и столкнулся с проблемой поиска файлов из программы на Си. В Dos существуют функции Findfirst и findnext, а здесь они отсутствуют.
Задача следующая: Необходимо заполнить массив именами файлов, учитывая маску имени файла, например "/usr/*.txt"
Большая просьба, укажите аналог перечисленых функций и/или проиллюстрируйте фрагментом кода. Заранее благодарен. Спасибо за внимание!
 
Старый 22.05.2003, 14:57     # 2
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Смотри книгу Богатырева на http://lib.ru/CTOTOR/book.txt
Код:
А. Богатырев, 1992-95                  - 192 -                              Си в UNIX

    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>

    int listdir(char *dirname){
        register struct dirent *dirbuf;
        DIR *fddir;
        ino_t dot_ino = 0, dotdot_ino = 0;

        if((fddir = opendir (dirname)) == NULL){
            fprintf(stderr, "Can't read %s\n", dirname);
            return 1;
        }
        /* Без сортировки по алфавиту */
        while ((dirbuf = readdir (fddir)) != NULL ) {
            if (dirbuf->d_ino == 0) continue;
            if (strcmp (dirbuf->d_name, "." ) == 0){
                    dot_ino = dirbuf->d_ino;
                    continue;
            } else if(strcmp (dirbuf->d_name, "..") == 0){
                    dotdot_ino = dirbuf->d_ino;
                    continue;
            } else printf("%s\n", dirbuf->d_name);
        }
        closedir (fddir);

        if(dot_ino    == 0) printf("Поврежденный каталог: нет имени \".\"\n");
        if(dotdot_ino == 0) printf("Поврежденный каталог: нет имени \"..\"\n");
        if(dot_ino && dot_ino == dotdot_ino)  printf("Это корневой каталог диска\n");

        return 0;
    }

    int main(int ac, char *av[]){
        int i;

        if(ac > 1) for(i=1; i < ac; i++) listdir(av[i]);
        else                             listdir(".");

        return 0;
    }
И так далее.....
__________________
Best Regards
alexey_ma вне форума  
Старый 22.05.2003, 15:08     # 3
andryas
Guest
 
Сообщения: n/a

Спасибо!

Большое спасибо! Работает. Задача миниум есть!
Но нет сортировки и не по маске. Может кто подскажет как сразу и по маске отбирать?
 
Старый 22.05.2003, 15:38     # 4
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Посмотри книгу внимательно. Мне кажется что там где-то был пример поиска по маске.
__________________
Best Regards
alexey_ma вне форума  
Старый 22.05.2003, 15:52     # 5
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
До кучи:
массив сам потом можешь отсортировать как тебе нужно и еще при добавлении в массив можешь сделать проверку на то что имя файла соответствует маске.
__________________
Best Regards
alexey_ma вне форума  
Старый 22.05.2003, 15:55     # 6
andryas
Guest
 
Сообщения: n/a

Спасибо всем! Я уже воплощаю
 
Старый 23.05.2003, 15:32     # 7
Ryback
Guest
 
Сообщения: n/a

для сравнения по маске используй fnmatch
 
Старый 23.05.2003, 16:14     # 8
andryas
Guest
 
Сообщения: n/a

Хорошо. Попробую. Спасибо!
 

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:59.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.