The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
определение типа файла на си, !*! maverick, 04-Фев-05, 22:50  [смотреть все]
Привет. как мне на си узнать тип файла: обычный это файл или папка, или канал.. ?
код такой:

DIR *dir;
struct dirent *file;

dir = opendir(PATH);
while(file = readdir(dir))
{
  /* И ВОТ ТУТ НАДО УЗНАТЬ ТИП ФАйЛА, ИМЯ КОТОРОГО В
      file -> d_name
   если это файл - прочтать из него кое-что, если папка - continue;*/
}

PS:
(программирую я под linux)

  • определение типа файла на си, !*! Xenu, 07:08 , 05-Фев-05 (1)
    • определение типа файла на си, !*! Mikae, 15:46 , 06-Фев-05 (2)
      >$ man fstat


      Полагаю, что можно проще: воспользоваться членом d_type структуры dirent.

      • определение типа файла на си, !*! Xenu, 22:27 , 06-Фев-05 (3)
        >>$ man fstat
        >
        >Полагаю, что можно проще: воспользоваться членом d_type структуры dirent.

        посмотрел на man readdir, так там нету такого члена. Это все смотрелось на Linux

        The dirent structure is declared as follows:

            struct dirent
            {
                long d_ino;                 /* inode number */
                off_t d_off;                /* offset to this dirent */
                unsigned short d_reclen;    /* length of this d_name */
                char d_name [NAME_MAX+1];   /* file name (null-terminated) */
            }

        посмотрел в /usr/include/linux/dirent.h, там есть dirent64 и в ней есть d_type. То есть надо readdir64 использовать.

        struct dirent {
            long        d_ino;
            __kernel_off_t    d_off;
            unsigned short    d_reclen;
            char        d_name[256]; /* We must not include limits.h! */
        };

        struct dirent64 {
            __u64        d_ino;
            __s64        d_off;
            unsigned short    d_reclen;
            unsigned char    d_type;
            char        d_name[256];
        };

        #ifdef __KERNEL__

        struct linux_dirent64 {
            u64        d_ino;
            s64        d_off;
            unsigned short    d_reclen;
            unsigned char    d_type;
            char        d_name[0];
        };

        #endif    /* __KERNEL__ */




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру