The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
opendir() && stat(), !*! Jenizix, 21-Июн-05, 02:48  [смотреть все]
OS: Linux Slackware 10.1
Compiler: g++

Пишу что-то типа ls в *nix... так вот как перебрать содержимое диры я заню, а вот как получить такую информацию о файле как тип файла(бинарник, архив, папка, линк) и т.п. незнаю... и еще, как получить флаги доступа? да и поиск чето не колится...  пока юзаю ф-ию stat()...

Вот что я накодил:
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>

int main( int argc, char* argv[] )
{
    char path[]="/etc";
    char tmp[1024];
    DIR *dir;
    dir = opendir(path);    
    struct dirent *namelist;
    struct stat file_stat;

    while(namelist = readdir(dir))
    {
    if(strcmp(namelist->d_name,"."))
        if(strcmp(namelist->d_name,".."))
        {
            strcpy(tmp,path);
            strcat(tmp,"/");
        strcat(tmp,namelist->d_name);
        stat(tmp,&file_stat);
            printf("%s - %i\n",namelist->d_name, file_stat.st_size);
        }
    }
    
    free(namelist);
    
    return 0;
}

  • opendir() && stat(), !*! SergeyP, 16:11 , 21-Июн-05 (1)
    >OS: Linux Slackware 10.1
    >Compiler: g++
    >
    >Пишу что-то типа ls в *nix... так вот как перебрать содержимое диры
    >я заню, а вот как получить такую информацию о файле как
    >тип файла(бинарник, архив, папка, линк) и т.п. незнаю... и еще, как
    >получить флаги доступа? да и поиск чето не колится...  пока
    >юзаю ф-ию stat()...
    >
    >Вот что я накодил:
    >#include <sys/types.h>
    >#include <sys/stat.h>
    >#include <dirent.h>
    >#include <stdio.h>
    >#include <malloc.h>
    >#include <string.h>
    >
    >int main( int argc, char* argv[] )
    >{
    >    char path[]="/etc";
    >    char tmp[1024];
    >    DIR *dir;
    >    dir = opendir(path);
    >    struct dirent *namelist;
    >    struct stat file_stat;
    >
    >    while(namelist = readdir(dir))
    >    {
    >    if(strcmp(namelist->d_name,"."))
    >        if(strcmp(namelist->d_name,".."))
    >     {
    >      strcpy(tmp,path);
    >      strcat(tmp,"/");
    >        strcat(tmp,namelist->d_name);
    >  stat(tmp,&file_stat);
    >            printf("%s - %i\n",namelist->d_name, file_stat.st_size);
    >     }
    >    }
    >
    >    free(namelist);
    >
    >    return 0;
    >}


    Chitai man: man 2 stat , tam vse est':
           struct stat {
                      dev_t         st_dev;      /* device */
                      ino_t         st_ino;      /* inode */
                      mode_t        st_mode;     /* protection */
                      nlink_t       st_nlink;    /* number of hard links */
                      uid_t         st_uid;      /* user ID of owner */
                      gid_t         st_gid;      /* group ID of owner */
                      dev_t         st_rdev;     /* device type (if inode device) */
                      off_t         st_size;     /* total size, in bytes */
                      blksize_t     st_blksize;  /* blocksize for filesystem I/O */
                      blkcnt_t      st_blocks;   /* number of blocks allocated */
                      time_t        st_atime;    /* time of last access */
                      time_t        st_mtime;    /* time of last modification */
                      time_t        st_ctime;    /* time of last change */
                  };




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

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