Привет. как мне на си узнать тип файла: обычный это файл или папка, или канал.. ?
код такой:DIR *dir;
struct dirent *file;dir = opendir(PATH);
while(file = readdir(dir))
{
/* И ВОТ ТУТ НАДО УЗНАТЬ ТИП ФАйЛА, ИМЯ КОТОРОГО В
file -> d_name
если это файл - прочтать из него кое-что, если папка - continue;*/
}PS:
(программирую я под linux)
$ man fstat
>$ man fstat
Полагаю, что можно проще: воспользоваться членом d_type структуры dirent.
>>$ 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__ */
man 2 stat