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;
}
>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 */
};