The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"определение типа файла на си"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"определение типа файла на си" 
Сообщение от maverick emailИскать по авторуВ закладки on 04-Фев-05, 22:50  (MSK)
Привет. как мне на си узнать тип файла: обычный это файл или папка, или канал.. ?
код такой:

DIR *dir;
struct dirent *file;

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

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

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "определение типа файла на си" 
Сообщение от Xenu Искать по авторуВ закладки on 05-Фев-05, 07:08  (MSK)
$ man fstat
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "определение типа файла на си" 
Сообщение от Mikae Искать по авторуВ закладки on 06-Фев-05, 15:46  (MSK)
>$ man fstat


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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "определение типа файла на си" 
Сообщение от Xenu Искать по авторуВ закладки on 06-Фев-05, 22:27  (MSK)
>>$ 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__ */

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "определение типа файла на си" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 07-Фев-05, 18:48  (MSK)
man 2 stat
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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