URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4711
[ Назад ]

Исходное сообщение
"Рекурсивный проход C/C++"

Отправлено samara , 04-Окт-05 00:29 
Приветствую! Вас!
Такой вопрос.
уже несколько раз останавливает меня одна проблема.
вообще-то очень хочется самому сообразить.
уж больно интересная задачка.

Как построена логика в РЕКУРСИВНОМ проходе по директориям ?

ведь на этом построены все программы ls grep find slocate и т. д.
или не все или я в чём-то заблуждаюсь

я знаком с вызовом ftw у меня даже получилось

1. используют ли программы ls grep find slocate и др.
   вызов ftw или у них свой алгоритм?
  
2. если у ls grep find slocate и др. свой алгоритм
   то как он выглядит.
  
3. Есть ли в QT что-то подобное ftw
   обычно C++ библиотеки от IDE очень умные
   пытался в QT найти что-то вроде( QFileDialog ).
   например говориш ей директорию а она сама возввращает
   файлы или директории в поддиректориях
   никак не мог найти ?

    или нужно самому мудрить?  
      


Содержание

Сообщения в этом обсуждении
"Рекурсивный проход C/C++"
Отправлено sandy , 04-Окт-05 11:11 
>Приветствую! Вас!
>Такой вопрос.
>уже несколько раз останавливает меня одна проблема.
>вообще-то очень хочется самому сообразить.
>уж больно интересная задачка.
>
>Как построена логика в РЕКУРСИВНОМ проходе по директориям ?
>
>ведь на этом построены все программы ls grep find slocate и т.
>д.
>или не все или я в чём-то заблуждаюсь
>
>я знаком с вызовом ftw у меня даже получилось
>
>1. используют ли программы ls grep find slocate и др.
>   вызов ftw или у них свой алгоритм?
>
>2. если у ls grep find slocate и др. свой алгоритм
>   то как он выглядит.
>
>3. Есть ли в QT что-то подобное ftw
>   обычно C++ библиотеки от IDE очень умные
>   пытался в QT найти что-то вроде( QFileDialog ).
>   например говориш ей директорию а она сама возввращает
>   файлы или директории в поддиректориях
>   никак не мог найти ?
>
>    или нужно самому мудрить?
>


Если у Вас FreeBSD, - поставьте сырцы и посмотрите исходники, например
/usr/src/bin/ls/*


"Рекурсивный проход C/C++"
Отправлено Дениска , 04-Окт-05 12:40 
>>Приветствую! Вас!
>>Такой вопрос.
>>уже несколько раз останавливает меня одна проблема.
>>вообще-то очень хочется самому сообразить.
>>уж больно интересная задачка.
почему интересная? вроде как классическая, наверняка решается во всех ФС (древовидных) одинаково. т.е. функция берет список файлов из тек. каталога, и для каждого найденного каталога вызывает себя.

"Рекурсивный проход C/C++"
Отправлено Alexander S. Salieff , 06-Окт-05 20:36 
>>>Приветствую! Вас!
>>>Такой вопрос.
>>>уже несколько раз останавливает меня одна проблема.
>>>вообще-то очень хочется самому сообразить.
>>>уж больно интересная задачка.
>почему интересная? вроде как классическая, наверняка решается во всех ФС (древовидных) одинаково.
>т.е. функция берет список файлов из тек. каталога, и для каждого
>найденного каталога вызывает себя.

И на практике эта функция оказывается офигенно непрактичной, от бешенного пожирания ресурсов до stack overflow при обходе реального 200Гб винта. Лучше уж итеративный подход, когда функция вызывается в цикле и после каждого своего выполнения сохраняет текущее состояние для последующих вызовов в какой-нть структуре...



"Рекурсивный проход C/C++"
Отправлено samara , 07-Окт-05 00:27 
>>>>Приветствую! Вас!
>>>>Такой вопрос.
>>>>уже несколько раз останавливает меня одна проблема.
>>>>вообще-то очень хочется самому сообразить.
>>>>уж больно интересная задачка.
>>почему интересная? вроде как классическая, наверняка решается во всех ФС (древовидных) одинаково.
>>т.е. функция берет список файлов из тек. каталога, и для каждого
>>найденного каталога вызывает себя.
>
>И на практике эта функция оказывается офигенно непрактичной, от бешенного пожирания ресурсов
>до stack overflow при обходе реального 200Гб винта. Лучше уж итеративный
>подход, когда функция вызывается в цикле и после каждого своего выполнения
>сохраняет текущее состояние для последующих вызовов в какой-нть структуре...

извините
о какой функции вы говорите
о ftw  или о другой


"Рекурсивный проход C/C++"
Отправлено Alexander S. Salieff , 07-Окт-05 15:38 
>>>>>Приветствую! Вас!
>>>>>Такой вопрос.
>>>>>уже несколько раз останавливает меня одна проблема.
>>>>>вообще-то очень хочется самому сообразить.
>>>>>уж больно интересная задачка.
>>>почему интересная? вроде как классическая, наверняка решается во всех ФС (древовидных) одинаково.
>>>т.е. функция берет список файлов из тек. каталога, и для каждого
>>>найденного каталога вызывает себя.
>>
>>И на практике эта функция оказывается офигенно непрактичной, от бешенного пожирания ресурсов
>>до stack overflow при обходе реального 200Гб винта. Лучше уж итеративный
>>подход, когда функция вызывается в цикле и после каждого своего выполнения
>>сохраняет текущее состояние для последующих вызовов в какой-нть структуре...
>
>извините
>о какой функции вы говорите
>о ftw  или о другой


Я говорю о любой рекурсивной функции, которая "берет список файлов из тек. каталога, и для каждого найденного каталога вызывает себя". Неограниченная рекурсия в любом случае зло для практического применения. Как на разных системах реализована ftw, я, к сожалению, не знаю, но хотелось бы верить, что с использованием итеративного подхода.


"Рекурсивный проход C/C++"
Отправлено samara , 05-Окт-05 00:18 
>>Приветствую! Вас!
>>Такой вопрос.
>>уже несколько раз останавливает меня одна проблема.
>>вообще-то очень хочется самому сообразить.
>>уж больно интересная задачка.
>>
>>Как построена логика в РЕКУРСИВНОМ проходе по директориям ?
>>
>>ведь на этом построены все программы ls grep find slocate и т.
>>д.
>>или не все или я в чём-то заблуждаюсь
>>
>>я знаком с вызовом ftw у меня даже получилось
>>
>>1. используют ли программы ls grep find slocate и др.
>>   вызов ftw или у них свой алгоритм?
>>
>>2. если у ls grep find slocate и др. свой алгоритм
>>   то как он выглядит.
>>
>>3. Есть ли в QT что-то подобное ftw
>>   обычно C++ библиотеки от IDE очень умные
>>   пытался в QT найти что-то вроде( QFileDialog ).
>>   например говориш ей директорию а она сама возввращает
>>   файлы или директории в поддиректориях
>>   никак не мог найти ?
>>
>>    или нужно самому мудрить?
>>
>
>
>Если у Вас FreeBSD, - поставьте сырцы и посмотрите исходники, например
>/usr/src/bin/ls/*

имеется и linux и freebsd исходники
я копался но нашел  
я подумал так: ведь это shell штучки
и поэтому как такового ls.c не существует
а сам код где-нибудь в общем исходнике
но я попробую ещё разок поискать
спасибо!


"Рекурсивный проход C/C++"
Отправлено qq , 05-Окт-05 08:26 

>freebsd исходники
>как такового ls.c не существует

существует:
/usr/src/bin/ls/ls.c


"Рекурсивный проход C/C++"
Отправлено Дениска , 05-Окт-05 08:28 
>имеется и linux и freebsd исходники
>я копался но нашел
>я подумал так: ведь это shell штучки
>и поэтому как такового ls.c не существует
с чего бы это быть "штучкам" shell? типа каждый писатель шелл организует ls по-своему??? в каждой свои ашипки и проч? это не unix-way. как это нет ls.c? бинарник есть, а исходника нету? нууу, вряд ли они его сразу в кодах набирают, посему воспользуемся той же find, про которую изначально был вопрос, и она нам скажет (для freebsd, например), что мол гляди в
/usr/src/bin/ls/ и найдешь там то, что ищешь.

вот только я не понял, как связана ls с вашим вопросом о рекурсивном хождении по дереву каталогов.

>а сам код где-нибудь в общем исходнике
>но я попробую ещё разок поискать
>спасибо!



"Рекурсивный проход C/C++"
Отправлено samara , 07-Окт-05 00:41 
>>имеется и linux и freebsd исходники
>>я копался но нашел
>>я подумал так: ведь это shell штучки
>>и поэтому как такового ls.c не существует
>с чего бы это быть "штучкам" shell? типа каждый писатель шелл организует
>ls по-своему??? в каждой свои ашипки и проч? это не unix-way.
>как это нет ls.c? бинарник есть, а исходника нету? нууу, вряд
>ли они его сразу в кодах набирают, посему воспользуемся той же
>find, про которую изначально был вопрос, и она нам скажет (для
>freebsd, например), что мол гляди в
>/usr/src/bin/ls/ и найдешь там то, что ищешь.
>
>вот только я не понял, как связана ls с вашим вопросом о
>рекурсивном хождении по дереву каталогов.
я не утверждаю о ls я предполагаю

>>а сам код где-нибудь в общем исходнике
>>но я попробую ещё разок поискать
>>спасибо!



"Рекурсивный проход C/C++"
Отправлено chip , 05-Окт-05 10:03 
>имеется и linux и freebsd исходники

locate ls.c

>я копался но нашел
>я подумал так: ведь это shell штучки
>и поэтому как такового ls.c не существует
>а сам код где-нибудь в общем исходнике
>но я попробую ещё разок поискать
>спасибо!

http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/