对SD卡,EMMC容量的检查

对这一块的操作涉及到的函数系列:setmntent(),getmntent(),endmntent(),stavfs()
在linux下man setmntent

	  #include <stdio.h>
      #include <mntent.h>
       FILE *setmntent(const char *filename, const char *type);  //打开包含挂载点项目的文件
       struct mntent *getmntent(FILE *fp); //读取整个文档,传回指向struct mntent结构的指针
       int addmntent(FILE *fp, const struct mntent *mnt);
       int endmntent(FILE *fp); //关闭文件
       struct mntent {
               char *mnt_fsname;   /* name of mounted filesystem */
               char *mnt_dir;      /* filesystem path prefix */
               char *mnt_type;     /* mount type (see mntent.h) */
               char *mnt_opts;     /* mount options (see mntent.h) */
               int   mnt_freq;     /* dump frequency in days */
               int   mnt_passno;   /* pass number on parallel fsck */
           };
       --------------------------------------------------------------------------------------------
       #include <sys/statvfs.h>
       int statvfs(const char *path, struct statvfs *buf);
       int fstatvfs(int fd, struct statvfs *buf);
	   struct statvfs {
			   unsigned long  f_bsize;    /* file system block size */文件系统块大小
			   unsigned long  f_frsize;   /* fragment size */碎片大小
			   fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
			   fsblkcnt_t     f_bfree;    /* # free blocks */空闲的块
			   fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */用户级的空闲节点
			   fsfilcnt_t     f_files;    /* # inodes */节点
			   fsfilcnt_t     f_ffree;    /* # free inodes */空闲的节点
			   fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */用户级的空闲节点
			   unsigned long  f_fsid;     /* file system ID */
			   unsigned long  f_flag;     /* mount flags */
			   unsigned long  f_namemax;  /* maximum filename length */
	};

Linux中的/etc/fstab、/etc/mtab、/proc/mounts文件区别
/etc/fstab文件:/etc/fstab文件记录静态文件系统信息
该文件记录计算机硬盘分区相关信息,启动Linux、mount挂载分区等命令执行都,都会用到fstab信息,看页面示例也是带有:
/etc/mtab文件:
/etc/mtab该文件也是记载当前系统已经装载的文件系统,包括一些操作系统虚拟文件,这跟/etc/fstab有些不同。/etc/mtab文件在mount挂载、umount卸载时都会被更新, 时刻跟踪当前系统中的分区挂载情况。
/proc/mounts文件:
其实还有个/proc/mounts,这个文件也记录当前系统挂载信息,通过比较,/etc/mtab有的内容,/proc/mounts也有,只是序有所不同,另外还多了一条根文件系统信息:
1,对EMMC容量检查

int nandflash_capacity_detect()
{
		char *table = "/proc/mounts";   //这个可以根据自己的情况修改
		struct mntent *mnt;
		struct statvfs statbuf;
		uchar available_capacity = 0;
		FILE *fp;
		fp = fopen(table,"r");
		if(NULL == fp)
		{
				return 0;
		}
		while((mnt = getmnetent(fp)))
		{
				if(strncmp(mnt->mnt_dir,"/mnt/mmcblk0p4",strlen("/mnt/mmcblk0p4")));
				{
						continue;
				}
				if(statvfs(mnt->mnt_dir,&statbuf) < 0)
				{
						break;
				}else{
						availble_capacity = (statbuf.f_bavail * ((uchar)statbuf.f_bsize)  + 1024 / 2)  / 1024;  //单位为M
						break;
				}
		}
		endmntent(fp);
		return availble_capacity ;
}
		

猜你喜欢

转载自blog.csdn.net/wzw_shinian/article/details/89515925