⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 show_free.cpp

📁 用linux开发的安防暴警的有关代码
💻 CPP
字号:
#include <stdio.h>#include <stdlib.h>#include <inttypes.h>#include <sys/statvfs.h>#include <sys/types.h>#include <mntent.h>#include <string.h>#ifndef CHAR_BIT# define CHAR_BIT 8#endif#define ME_DUMMY(fs_name, fs_type) (!strcmp(fs_type, "auto") || !strcmp(fs_type, "ignore"))#define ME_REMOTE(fs_name, fs_type) (strchr (fs_name, ':') != 0)#define PROPAGATE_ALL_ONES(x) (signed (x) == -1 ? (uintmax_t)-1 : (uintmax_t)(x))#define EXTRACT_TOP_BIT(x) ((x) & ((uintmax_t) 1 << (sizeof (x) * CHAR_BIT - 1)))#define PROPAGATE_TOP_BIT(x) ((x) | ~ (EXTRACT_TOP_BIT (x) - 1))struct mount_entry{	char *me_devname;		// Device node pathname, including "/dev/".	char *me_mountdir;		// Mount point directory pathname.	char *me_type;			// "nfs", "4.2", etc.	dev_t me_dev;			// Device number of me_mountdir.	unsigned int me_dummy : 1;	// Nonzero for dummy filesystems.	unsigned int me_remote : 1;	// Nonzero for remote fileystems.};struct fs_usage{	int fsu_blocksize;		// Size of a block.	uintmax_t fsu_blocks;		// Total blocks.	uintmax_t fsu_bfree;		// Free blocks available to superuser.	uintmax_t fsu_bavail;		// Free blocks available to non-superuser.	int fsu_bavail_top_bit_set;	// 1 if fsu_bavail represents a value < 0.	uintmax_t fsu_files;		// Total file nodes.	uintmax_t fsu_ffree;		// Free file nodes.};size_t	show_free(char *,char *);void read_filesystem_list(char *,char *);size_t get_free(const char *disk, const char *mount_point,const char *fstype, int me_dummy, int me_remote);int get_fs_usage(const char *path, const char *disk, fs_usage *fsp);static mount_entry	*mount_list;void read_filesystem_list(char * device,char *mount_point)//device=null,mountdir起作用,mountdir=null,device起作用{	mount_list = new mount_entry;	mount_list->me_devname = device;	mount_list->me_mountdir = mount_point;	mount_list->me_type = "nfs";	mount_list->me_dummy = ME_DUMMY(mount_list->me_devname, mount_list->me_type);	mount_list->me_remote = ME_REMOTE(mount_list->me_devname, mount_list->me_type);	mount_list->me_dev = (dev_t)-1;	return;}int get_fs_usage(const char *path, const char *disk, fs_usage *fsp){	struct statvfs fsd;	if (statvfs (path, &fsd) < 0)		return -1;	fsp->fsu_blocksize =PROPAGATE_ALL_ONES (fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize);	fsp->fsu_blocks = PROPAGATE_ALL_ONES (fsd.f_blocks);	fsp->fsu_bfree = PROPAGATE_ALL_ONES (fsd.f_bfree);	fsp->fsu_bavail = PROPAGATE_TOP_BIT (fsd.f_bavail);	fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.f_bavail) != 0;	fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.f_files);	fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.f_ffree);	return 0;}size_t get_free(const char *disk, const char *mount_point,const char *fstype, int me_dummy, int me_remote){	struct fs_usage fsu;	const char *stat_file;	stat_file = mount_point ? mount_point : disk;	if(get_fs_usage(stat_file, disk, &fsu))		return 0;	size_t free = fsu.fsu_bavail * fsu.fsu_blocksize;	return free;}size_t show_free(char * device,char *mount_point){	read_filesystem_list(device,mount_point);	if(mount_list == NULL)		return 0;	mount_entry *me = mount_list;	size_t df = (size_t)get_free(me->me_devname, me->me_mountdir,		me->me_type, me->me_dummy, me->me_remote);	delete	mount_list;	return df;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -