如何以编程方式在Linux中获取目录的可用磁盘空间

是否有一个函数返回给定目录path的驱动器分区上有多less空闲空间?

检查man statvfs(2)

我相信你可以计算'自由空间'为f_bsize * f_bfree

 NAME statvfs, fstatvfs - get file system statistics SYNOPSIS #include <sys/statvfs.h> int statvfs(const char *path, struct statvfs *buf); int fstatvfs(int fd, struct statvfs *buf); DESCRIPTION The function statvfs() returns information about a mounted file system. path is the pathname of any file within the mounted file system. buf is a pointer to a statvfs structure defined approximately as follows: 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 */ }; 

你可以使用boost :: filesystem:

 struct space_info // returned by space function { uintmax_t capacity; uintmax_t free; uintmax_t available; // free space available to a non-privileged process }; space_info space(const path& p); space_info space(const path& p, system::error_code& ec); 

例:

 #include <boost/filesystem.hpp> using namespace boost::filesystem; space_info si = space("."); cout << si.available << endl; 

返回:types为space_info的对象。 space_info对象的值是通过使用POSIX statvfs()来获得POSIX结构体statvfs,然后将其f_blocks,f_bfree和f_bavail成员乘以其f_frsize成员,并将结果分配给容量,free和可用的成员分别。 任何值不能确定的成员应被设置为-1。

使用df -h /path/to/directory (助记符,“无磁盘”)。 -h标志使它使用人类可读的基本2大小(基于1024字节到千字节),而不是512字节块的原始计数。 您可以使用-H获得基数为10的大小(基于1000字节到千字节 – 您知道,硬盘制造商宣传的大小)。

例:

 $ df -h . Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 233Gi 82Gi 150Gi 36% / 

要指定使用情况,请使用du -h /path (磁盘使用情况)。

可以通过使用如下的pipe道将命令输出到程序中:

 char cmd[]="df -h /path/to/directory" ; FILE* apipe = popen(cmd, "r"); // if the popen succeeds read the commands output into the program with while ( fgets( line, 132 , apipe) ) { // handle the readed lines } pclose(apipe); // -----------------------------------