您的位置:首页 > 运维架构 > Linux

Linux C程序实现查看文件夹大小

2017-04-14 15:52 148 查看
问题描述 

在存储空间有限的情况下,经常要对实时判断一个存储文件夹大小,现在用linux C编写一个线程函数,该线程能够实现循环查询某个存储文件夹的大小并通过终端打印出来,能够起到实时监控的作用。

解决方法

代码如下:

代码1:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <dirent.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include<stdlib.h>

void* limit_the_file_down_size(void* parameter);

int main()
{
pthread_t pid_Limit_the_file_down_size;
pthread_attr_t     attr ;
pthread_attr_init(&attr);       //故障线程属性初始化
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);                    //定义为与系统中所有线程一起竞争CPU时间
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);        //属性设置为分离状态
pthread_create(&pid_Limit_the_file_down_size,&attr,limit_the_file_down_size,NULL);
pthread_attr_destroy(&attr);                     //销毁线程

while(1)
{
sleep(5);
}

return EXIT_SUCCESS;
}

void* limit_the_file_down_size(void* parameter)
{
int status;
while(1)
{
if((status=system("du -sh /home/fip/test/"))<0)
{
printf("system error.\n");
exit(0);
}

sleep(1);
}
return NULL ;
}




编译并运行,观察终端打印显示文件夹大小



在监控过程中加入文件至文件夹,终端输出打印的文件夹大小数值改变

代码2:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <dirent.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include<stdlib.h>

#define file_down_path "/home/fip/test/"

void* limit_the_file_down_size(void* parameter);

int main()
{
pthread_t pid_Limit_the_file_down_size;
pthread_attr_t  attr ;
pthread_attr_init (&attr);              //故障线程属性初始化
pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);          //定义为与系统中所有线程一起竞争CPU时间
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); //属性设置为分离状态
pthread_create(&pid_Limit_the_file_down_size,&attr,limit_the_file_down_size,NULL);
pthread_attr_destroy(&attr);                                  //销毁线程

while(1)
{
sleep(5);
}

return EXIT_SUCCESS;
}

void* limit_the_file_down_size(void* parameter)
{

while(1)
{
struct stat statbuff;
float filesize;
int sum(const char *fpath, const struct stat *sb, int typeflag)
{

filesize+= sb->st_size;
return 0;

}

ftw(file_down_path, &sum, 1);
filesize-=4096;////减去文件夹自身大小
printf("!!!!test!!!! the_size_is %.3f KB\n",filesize/1000);
filesize=0;//将filesize置0,否则会累加
sleep(1);
}
return NULL ;




编译并运行,观察终端打印显示文件夹大小



在监控过程中加入文件至文件夹,终端输出打印的文件夹大小数值改变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 linux 存储 线程