#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;
}
循环检测磁盘容量,删除较早文件
最新推荐文章于 2023-10-08 21:02:53 发布