| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Заполнение массива именами файлов на Си в Unix
Я недавно перешел на програмирование в Unix, и столкнулся с проблемой поиска файлов из программы на Си. В Dos существуют функции Findfirst и findnext, а здесь они отсутствуют.
Задача следующая: Необходимо заполнить массив именами файлов, учитывая маску имени файла, например "/usr/*.txt" Большая просьба, укажите аналог перечисленых функций и/или проиллюстрируйте фрагментом кода. Заранее благодарен. Спасибо за внимание! |
|
|
# 2 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Смотри книгу Богатырева на 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 |
|
|