Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 17:09   #1
WESTnik
 
Регистрация: 18.03.2010
Сообщений: 6
По умолчанию Программирование под SUSE

Доброго времени суток!!!
Товарищи программисты у меня есть список вопросов по данному заданию:
Написать программу, находящую в заданном каталоге и всех его подкаталогах все исполняемые файлы. Диапазон (мин. мах.) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки. Имя каталога задаётся пользователем в качестве третьего аргумента командной строки. Программа выводит результаты поиска в файл (четвертый аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводится общее число просмотренных файлов. Процедура поиска для каждого подкаталога должна запускаться в отдельном процессе. Каждый процесс выводит на экран свой pid, полный путь, имя и размер просмотренного файла, общее число просмотренных файлов в подкаталоге. Число запущенных процессов в любой момент времени не должно превышать N (вводится пользователем). Проверить работу программы для каталога /usr/ размер 31000 31500 N=6..

А какие файлы в линуксе исполняемые????
Т.е вид в коммандной строке будет следующий: <имя программы><мин.размер><макс.размер> <имя каталога>???
Я так понял что необходимо работать с main(argc, argv[])???
Что то если честно не воспринимается это задание.....помогите чем можете, советом, кодом)))
Заранее благодарен.

Последний раз редактировалось WESTnik; 07.05.2010 в 17:15.
WESTnik вне форума Ответить с цитированием
Старый 07.05.2010, 18:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
А какие файлы в линуксе исполняемые????
Фактически все, у каких стоит атрибут x.
p51x вне форума Ответить с цитированием
Старый 08.05.2010, 14:48   #3
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

абсолютно верно, исполняемыми файлами являются файлы, для которых установлен атрибут x. Почитать про атрибуты файлов можно, например, здесь: http://www.sdteam.com/?tid=1335 (раздел "Атрибуция").

Аргументы командной строки забираются из массива agrv.
В argc хранится число аргументов, а в argv сами аргументы (причём argv[0] хранит строку с названием программы). Нужно помнить, что argv - массив строк, поэтому, если вам нужно получить числа (к примеру, диапазоны размеров файлов), нужно преобразовать их из строки в int.
kogemrka вне форума Ответить с цитированием
Старый 08.05.2010, 14:57   #4
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Цитата:
Сообщение от WESTnik Посмотреть сообщение
Т.е вид в коммандной строке будет следующий: <имя программы><мин.размер><макс.размер> <имя каталога>???
Я так понял что необходимо работать с main(argc, argv[])???
Воспользуйтесь getopt() для удобного разбора параметров командной строки.

Цитата:
Сообщение от WESTnik Посмотреть сообщение
А какие файлы в линуксе исполняемые????
Как уже сказали выше - все, у которых стоит атрибут x. Для определения атрибутов файлов и получения прочей информации, следует воспользоваться stat()

Для чтения (получения списка всех файлов и каталогов) заданного каталога следует использовать readdir(). А распараллеливание проще всего выполнить с помощью fork().

Логика может быть примерно такой:
Начинаете читать заданный каталог с помощью readdir(). Каждый следующий прочитанный файл проверяете с помощью stat(), если это каталог - выполняете fork() и в новом потокое запускаете аналогичный алгоритм. Если stat() сообщает, что текущий файл - это исполняемый файл - выводим данные на консоль. И так далее, пока не будет прочитан весь родительский каталог и возможные подкаталоги.

P.S. Я намеренно не приводил в пример какие либо исходные коды, т.к. предоставленной информации более чем достаточно, что бы самостоятельно разобраться с указанными функциями, найти примеры и попробовать написать приложение. Если же возникнут конкретные проблемы в коде - пишите, постараемся помочь.
oleg kutkov вне форума Ответить с цитированием
Старый 03.04.2011, 20:35   #5
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

У меня давально похожее условие на условие автора.

Я вроде разобрался с тем, как 3-ий аргумент сделать именем каталога.
Первое, что непонятно, это: исполняемые файлы и их диапазон. Как можно их выявить и задать диапазон?

Код:
int main(int argc, char* argv[])
{
    DIR* dir;
    struct dirent* de;
 
    dir = opendir(argv[3]);
 
    while((de = readdir(dir)) != 0)
        ....  // тут ,думаю, и далжно проверить файлы на исполняемость?
return 0;
}
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование под Windows на C# I.C.E Помощь студентам 3 29.04.2010 16:39
программирование под WM Mclaren Софт 1 21.04.2010 13:28
программирование под Symbian Mclaren Помощь студентам 1 09.03.2010 09:43
Программирование под .Net RIO Свободное общение 5 07.01.2010 22:12
Программирование под nix Simply-Art Свободное общение 8 20.03.2007 11:45