powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Программирование под Linux
7 сообщений из 7, страница 1 из 1
Программирование под Linux
    #35882642
Harkonen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно написать программу обхода каталогов в ОС 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;
}
Компилирует без ошибок.А когда выполняешь выскакивает ошибка сегментирования.
Может кто знает в чем проблема или может показать другой способ обхода
...
Рейтинг: 0 / 0
Программирование под Linux
    #35882652
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Harkonen
А когда выполняешь выскакивает ошибка сегментирования.

gdb в руки и смотреть - где и на чём. Тебя что, отладке совсем не учили?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование под Linux
    #35882685
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Harkonen
...
Компилирует без ошибок.А когда выполняешь выскакивает ошибка сегментирования.
Может кто знает в чем проблема или может показать другой способ обхода
Проблема в записях c именами "." и ".." .
...
Рейтинг: 0 / 0
Программирование под Linux
    #35883128
Bogerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле здесь гораздо больше проблем, чем просто проблемы с обработкой "." и "..". В частности нет проверки opendir() на ошибку и нет проверки границ массива символов, из за которой в конечном итоге и происходит segmentation fault.
...
Рейтинг: 0 / 0
Программирование под Linux
    #35883422
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BogermНа самом деле здесь гораздо больше проблем, чем просто проблемы с обработкой "." и "..". В частности нет проверки opendir() на ошибку и нет проверки границ массива символов, из за которой в конечном итоге и происходит segmentation fault.Откуда Вы знаете, что у автора нет каталога "/home/serg/test", а если есть, то с именами файлов
ненормальной длины ? Которые почему-то у него возвращаются вызовом "readdir" раньше
стандартной записи с именем ".", обозначающей текущий каталог и приводящей к
бесконечному рекурсивному вызову функции rec с параметром name1="/home/serg/test/./././././ ...",
что не может не привести аварийному останову и поэтому и является проблемой. Добавленные Вами
"проблемы" суть признаки чернового варианта программы, который может быть
автор и не предполагает развивать в какое-либо реальное приложение.
...
Рейтинг: 0 / 0
Программирование под Linux
    #35883530
Harkonen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема действительно в записях c именами "." и ".." .Спасибо avb1003.Теперь возникла новая проблема:как это обойти.
P.S Это черновой вариант программы
...
Рейтинг: 0 / 0
Программирование под Linux
    #35883537
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HarkonenПроблема действительно в записях c именами "." и ".." .Спасибо avb1003.Теперь возникла новая проблема:как это обойти.
P.S Это черновой вариант программыПроблема?!
А если "по рабоче-крестьянски":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
        if(strcmp(d->d_name,".") &&
                strcmp(d->d_name,"..")) {
            if(S_ISDIR(s.st_mode)) {
                rec(st);
            }
        }
        else
            printf("===> special entry %s\n",d->d_name);
...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Программирование под Linux
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]