Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: c - find  (Прочитано 265 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 14672
  • Я не слышу.
    • Просмотр профиля
c - find
« : 01 Июль 2018, 11:54:04 »
// find
// test_find.c
// victor00000 (c) 2018.
#define _GNU_SOURCE
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
// ~$ gcc -Wall test_find.c -o test_find
// ~$ ./test_find /etc 1 2 3

void find_l ( const char *p ){

DIR *d = 0;
d = opendir ( p );
if ( d == 0 ){
perror ( p );
return;
}

struct dirent *e;
char *c = 0;

while ((e = readdir ( d )) != 0 ){

if (e->d_type == 4){
if (e->d_name[0] == '.' ){
if (e->d_name[1] == 0) continue;
if (e->d_name[1] == '.' )
if (e->d_name[2] == 0) continue;
}}
if ( p[0] == '/' && p[1] == 0 )
asprintf (&c,"%s%s",p,e->d_name);
else
asprintf (&c,"%s/%s",p,e->d_name);

printf ("%s\n",c);
if ( e->d_type == 4 ){
find_l ( c );
}
free (c);
fflush ( stdout );
}
}

int main (int ia, char *ca[]){

if (ia == 1) return 0;

int i;
struct stat ls;
for (i=1;i<ia;i++){
if (!opendir (ca[i])){
if (lstat(ca[i],&ls) == 0){
printf ("%s\n",ca[i]);
continue;
}else{
perror (ca[i]);
continue;
}
}
printf ("%s\n",ca[i]);
find_l (ca[i]);
}
return 0;
}

http://paste.ubuntu.com/p/wyG9qVkmHd/
~.o

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 14672
  • Я не слышу.
    • Просмотр профиля
Re: c - find
« Ответ #1 : 15 Сентябрь 2018, 07:07:01 »
что функции closedir  нет.
найти
fflush ( stdout );
}
}
на
fflush ( stdout );
}
closedir (d);
}
« Последнее редактирование: 15 Сентябрь 2018, 13:15:31 от victor00000 »
~.o

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 1752
    • Просмотр профиля
Re: c - find
« Ответ #2 : 15 Сентябрь 2018, 12:47:20 »
Как это может быть, что opendir() есть, а closedir() нет? У меня есть.
Пётр.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 14672
  • Я не слышу.
    • Просмотр профиля
Re: c - find
« Ответ #3 : 15 Сентябрь 2018, 13:04:31 »
opendir кушатб память поднимался то ошибка "Too ....", так надо closedir очистить свободно, как free поставить забыл.



~.o

 

Страница сгенерирована за 0.058 секунд. Запросов: 24.