|
|
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
Нужно написать программу обхода каталогов в ОС Linux на языке C.Вот код: #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include<dirent.h> void rec(char name1[]) { char st[100]; struct stat s; DIR *dp; struct dirent *d; dp=opendir(name1); while(d=readdir(dp)) { strcpy(st,""); strcat(st,name1); strcat(st,"/"); strcat(st,d->d_name); stat(st,&s); if(S_ISREG(s.st_mode)) { printf("Name of file:%s",d->d_name); puts(""); } if(S_ISDIR(s.st_mode)) { rec(st); } } } int main(void) { rec("/home/serg/test"); return 0; } Компилирует без ошибок.А когда выполняешь выскакивает ошибка сегментирования. Может кто знает в чем проблема или может показать другой способ обхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2009, 17:57 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
Harkonen А когда выполняешь выскакивает ошибка сегментирования. gdb в руки и смотреть - где и на чём. Тебя что, отладке совсем не учили?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2009, 18:03 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
Harkonen ... Компилирует без ошибок.А когда выполняешь выскакивает ошибка сегментирования. Может кто знает в чем проблема или может показать другой способ обхода Проблема в записях c именами "." и ".." . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2009, 18:20 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
На самом деле здесь гораздо больше проблем, чем просто проблемы с обработкой "." и "..". В частности нет проверки opendir() на ошибку и нет проверки границ массива символов, из за которой в конечном итоге и происходит segmentation fault. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2009, 05:31 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
BogermНа самом деле здесь гораздо больше проблем, чем просто проблемы с обработкой "." и "..". В частности нет проверки opendir() на ошибку и нет проверки границ массива символов, из за которой в конечном итоге и происходит segmentation fault.Откуда Вы знаете, что у автора нет каталога "/home/serg/test", а если есть, то с именами файлов ненормальной длины ? Которые почему-то у него возвращаются вызовом "readdir" раньше стандартной записи с именем ".", обозначающей текущий каталог и приводящей к бесконечному рекурсивному вызову функции rec с параметром name1="/home/serg/test/./././././ ...", что не может не привести аварийному останову и поэтому и является проблемой. Добавленные Вами "проблемы" суть признаки чернового варианта программы, который может быть автор и не предполагает развивать в какое-либо реальное приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2009, 16:05 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
Проблема действительно в записях c именами "." и ".." .Спасибо avb1003.Теперь возникла новая проблема:как это обойти. P.S Это черновой вариант программы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2009, 18:44 |
|
||
|
Программирование под Linux
|
|||
|---|---|---|---|
|
#18+
HarkonenПроблема действительно в записях c именами "." и ".." .Спасибо avb1003.Теперь возникла новая проблема:как это обойти. P.S Это черновой вариант программыПроблема?! А если "по рабоче-крестьянски": Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2009, 18:51 |
|
||
|
|

start [/forum/topic.php?fid=25&fpage=128&tid=1485982]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 388ms |

| 0 / 0 |
