URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3915
[ Назад ]

Исходное сообщение
"определение типа файла на си"

Отправлено maverick , 04-Фев-05 22:50 
Привет. как мне на си узнать тип файла: обычный это файл или папка, или канал.. ?
код такой:

DIR *dir;
struct dirent *file;

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

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


Содержание

Сообщения в этом обсуждении
"определение типа файла на си"
Отправлено Xenu , 05-Фев-05 07:08 
$ man fstat

"определение типа файла на си"
Отправлено Mikae , 06-Фев-05 15:46 
>$ man fstat


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


"определение типа файла на си"
Отправлено Xenu , 06-Фев-05 22:27 
>>$ 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__ */


"определение типа файла на си"
Отправлено DeadMustdie , 07-Фев-05 18:48 
man 2 stat