循环检测磁盘容量,删除较早文件

#define DISK "/mnt/mmcblk0p1/"   
//SD卡所在位置,在我用海思开发板上。SD卡挂载在该目录下

int SDCarChick()
{
    while(1){
        long long total_size1, avail_size1;
        //磁盘的相关信息
        float avail_ratio1;
        struct dirent **namelist;
        struct statfs buf;
        //使用statfs结构体包含磁盘的相关信息

        while(1){
			char VENC_IPC1SaveFileDir[100] = "/mnt/mmcblk0p1/video/VENC_IPC1/";//文件保存的路径
            char VENC_IPC2SaveFileDir[100] = "/mnt/mmcblk0p1/video/VENC_IPC2/";//我的目录下只有文件,没有其他目录
            char VENC_IPC3SaveFileDir[100] = "/mnt/mmcblk0p1/video/VENC_IPC3/";//如有其他目录可以重复检测来比较,删除。
            char VENC_IPC4SaveFileDir[100] = "/mnt/mmcblk0p1/video/VENC_IPC4/";
            char* VENC_IPCSaveFileDir[4] ={VENC_IPC1SaveFileDir,VENC_IPC2SaveFileDir,VENC_IPC3SaveFileDir,VENC_IPC4SaveFileDir};
            memset(&buf,0,sizeof(struct statfs));
            statfs(DISK, &buf);//使用statfs函数取出挂载到/mnt目录下磁盘的信息
            total_size1 = (long long)buf.f_bsize * buf.f_blocks;//经过优化的传输快大小*磁盘总块数 单位是bytes
            avail_size1 = (long long)buf.f_bsize * buf.f_bfree;//经过优化的传输快大小*可用磁盘块数
            avail_ratio1 = (float)avail_size1/total_size1;//计算磁盘未使用率
            printf("avail_ratio1 = %lf\n",avail_ratio1);
            if(avail_ratio1 <= 0.250){
            //0.250-->表示需要磁盘剩余空间为25%时开始删除。这个数按自己实际情况来设定
                DIR *dirp1;
                DIR *dirp2;
                DIR *dirp3;
                DIR *dirp4;
                struct dirent *dp1,*dpTemp1;
                struct dirent *dp2,*dpTemp2;
                struct dirent *dp3,*dpTemp3;
                struct dirent *dp4,*dpTemp4;
                char buf1[50] = "9";//我的文件均是以时间命名,如果使用别的命名,将‘9’改成别的。
                char buf2[50] = "9";//并且用readdir函数得到文件名是字符串
                char buf3[50] = "9";//在这里使用"9"来比较,来得到最早的那个文件
                char buf4[50] = "9";//我的文件存放在四个不同的目录里,要考虑到有不同的情况,需要比较4次。

                /******************First Save Road************************/
                dirp1 = opendir("/mnt/mmcblk0p1/video/VENC_IPC1/"); //打开目录指针
                while ((dp1 = readdir(dirp1)) != NULL) { //通过目录指针读目录下文件名。
                    //在linux目录下会有‘.’和‘..’表示当前和上级目录。无法删除,需要排除掉。
                    if(strcmp(dp1->d_name,".")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp1->d_name,"..")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp1->d_name,buf1) < 0){
                        memset(buf1,0,sizeof(buf1));
                        strcpy(buf1,dp1->d_name);
                    }
                }
                printf("%s\n", buf1 );//这就是最早的的文件名
                (void) closedir(dirp1); //关闭目录
                /******************Second Save Road************************/
                dirp2 = opendir("/mnt/mmcblk0p1/video/VENC_IPC2/"); //打开目录指针
                while ((dp2 = readdir(dirp2)) != NULL) { //通过目录指针读目录
                    if(strcmp(dp2->d_name,".")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp2->d_name,"..")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp2->d_name,buf2) < 0){
                        memset(buf2,0,sizeof(buf2));
                        strcpy(buf2,dp2->d_name);
                    }
                }
                printf("%s\n", buf2 );
                (void) closedir(dirp2); //关闭目录
                /****************** Third Save Road************************/
                dirp3 = opendir("/mnt/mmcblk0p1/video/VENC_IPC3/"); //打开目录指针
                while ((dp3 = readdir(dirp3)) != NULL) { //通过目录指针读目录
                    if(strcmp(dp3->d_name,".")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp3->d_name,"..")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp3->d_name,buf3) < 0){
                        memset(buf3,0,sizeof(buf3));
                        strcpy(buf3,dp3->d_name);
                    }
                }
                printf("%s\n", buf3 );
                (void) closedir(dirp3); //关闭目录
                /******************Fourth Save Road************************/
                dirp4 = opendir("/mnt/mmcblk0p1/video/VENC_IPC4/"); //打开目录指针
                while ((dp4 = readdir(dirp4)) != NULL) { //通过目录指针读目录
                    if(strcmp(dp4->d_name,".")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp4->d_name,"..")  == 0 ){
                        continue;
                    }
                    if(strcmp(dp4->d_name,buf4) < 0){
                        memset(buf4,0,sizeof(buf4));
                        strcpy(buf4,dp4->d_name);
                    }
                }
                printf("%s\n", buf4 );
                (void) closedir(dirp4); //关闭目录
                /*********确定文件位置***************/

                strcat(VENC_IPCSaveFileDir[0],buf1);//得到文件名
                strcat(VENC_IPCSaveFileDir[1],buf2);
                strcat(VENC_IPCSaveFileDir[2],buf3);
                strcat(VENC_IPCSaveFileDir[3],buf4);
                /**********删除文件************/
                for(int i = 0 ;i <4;i++){
                    remove(VENC_IPCSaveFileDir[i]);//删除文件
                }
            }
            sleep(300);//要隔多长时间检测一次,这个间断时间和磁盘剩余量都应仔细考虑后确定。
        }
   
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值