#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
main()
{
DIR *d;
struct dirent *de;
struct stat buf;
int exists;
int total_size;
d = opendir(".");
if (d == NULL) {
perror("prsize");
exit(1);
}
total_size = 0;
for (de = readdir(d); de != NULL; de = readdir(d)) {
exists = stat(de->d_name, &buf);
if (exists < 0) {
fprintf(stderr, "Couldn't stat %s\n", de->d_name);
} else {
total_size += buf.st_size;
}
}
closedir(d);
printf("%d\n", total_size);
}
以下为另外一个文件夹大小提取程序,程序内容:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned int total = 0;
int sum(const char *fpath, const struct stat *sb, int typeflag)
{
total += sb->st_size;
return 0;
}
int main(int argc, char **argv)
{
if (!argv[1] || access(argv[1], R_OK)) {
return 1;
}
if (ftw(argv[1], &sum, 1)) {
perror("ftw");
return 2;
}
printf("%s: %u\n", argv[1], total);
return 0;
}
通过GCC编译程序
gcc -o dir_size dir_size.c
运行程序
./dir_size /licy/
下面的程序使用statfs函数实现硬盘大小数据提取,及剩余空间大小的提取,并把硬盘大小及剩余空间打印出来。
#include <stdio.h>;
#include <sys/vfs.h>;
#include <error.h>;
#define Gsize (1024.00*1024.00*1024.00)
#define Msize (1024.00*1024.00)
#ifndef EXT2_SUPER_MAGIC
#define EXT2_SUPER_MAGIC 0xef53
#endif
int main()
{
long long blocks,bfree;
struct statfs fs;
if(statfs("/",&fs)<0)
{
perror("statfs");
exit(0);
}
printf("%x\n",fs.f_type); /* type of filesystem (see below) */
printf("%ld\n",fs.f_bsize); /* optimal transfer block size */
printf("%ld\n",fs.f_blocks); /* total data blocks in file system */
printf("%ld\n",fs.f_bfree); /* free blocks in fs */
printf("%ld\n",fs.f_bavail); /* free blocks avail to non-superuser */
printf("%ld\n",fs.f_files); /* total file nodes in file system */
printf("%ld\n",fs.f_ffree); /* free file nodes in fs */
printf("%d\n",fs.f_fsid); /* file system id */
printf("%ld\n",fs.f_namelen); /* maximum length of filenames */
blocks=fs.f_blocks;
bfree=fs.f_bfree;
printf(" %lld\n",blocks);
if(fs.f_type==EXT2_SUPER_MAGIC)
{
printf("Total size of / is %f G\n",blocks*fs.f_bsize/Gsize);
printf("Free size of / is %f G\n",bfree*fs.f_bsize/Gsize);
}
}