LINUX.ORG.RU

readdir()


0

0

Приветствую уважаемые! Вопрос мой комуто покажится смешным, но всеже. Программа под FreeBSD: void main(){ struct stat *sb; struct dirent *dp; DIR *d; d=opendir("/var/log"); while((dp=readdir(d))!=NULL){ if (dp->d_name[0]=='.') continue; cout << "Type:" << int(dp->d_type) << " "; cout << dp->d_name << endl; } } Все работает и показывает именай файлов и их тип (для папок =4 для файлов=2) В тоже время при компиляции Linux все типы файлов выдает =0 (ASP Linux 7.1, Slackware Linux 7.0) Помогите - умираю Ж(

anonymous

дык, батенька, в хидеры и маны иногда пользительно заглядывать :)

в struct dirent нет поля d_type. используй struct dirent64

ananas ★★★★★
()

А как по имени понять это файл или директория?

anonymous
()

ну а почему в BSD есть такая возможность, я не думаю, что в Linux нет такой возможность.

anonymous
()

man readdir man stat

anonymous
()

функция stst в поле st_mode постоянно возвращает 0xbffff980 независимо от того файл это или директория или лмнк - совсем ничего не понимаю, запутался.

anonymous
()

а почему бы не воспользоваться макросами S_ISDIR, S_ISLNK и т.д.?

ananas ★★★★★
()

а подскажите тупому как - пример дайте плз...

anonymous
()

Прошу слезно, помогите!!!!!!!

anonymous
()

#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
  
#define DIRF "Directory"
#define OTHER "File"

int
main ()
{
  struct stat *sb = NULL;
  struct dirent *dp;
  DIR *d;
  char ft[20];
  
  d = opendir ("./");
  while ((dp = readdir (d)) != NULL)
    {
      if (dp->d_name[0] == '.')
	continue;
      if (sb == NULL)
	sb = (struct stat *) malloc (sizeof (struct stat));
      stat (dp->d_name, sb);
      bzero (&ft, 20);
      if (S_ISDIR (sb->st_mode))
	strcpy (ft, DIRF);
      else
	strcpy (ft, OTHER);
      printf("%s type: %s\n", dp->d_name, ft);
    }

  if (sb != NULL)
    free (sb);
  return 0;
}

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.