1*597ecc08STTaq #include <sys/statfs.h>
2*597ecc08STTaq #include <stdio.h>
3*597ecc08STTaq #include <fcntl.h>
4*597ecc08STTaq
main(int argc,char ** argv)5*597ecc08STTaq int main(int argc,char **argv)
6*597ecc08STTaq {
7*597ecc08STTaq int fd = open("/bin/about.elf", O_RDONLY);
8*597ecc08STTaq if (fd == -1)
9*597ecc08STTaq return 0;
10*597ecc08STTaq printf("fd = %d\n", fd);
11*597ecc08STTaq struct statfs diskInfo;
12*597ecc08STTaq
13*597ecc08STTaq
14*597ecc08STTaq fstatfs(fd, &diskInfo);
15*597ecc08STTaq unsigned long long blocksize1 = diskInfo.f_bsize; //每个block里包含的字节数
16*597ecc08STTaq unsigned long long totalsize = blocksize1 * diskInfo.f_blocks;//总的字节数,f_blocks为block的数目
17*597ecc08STTaq printf("Total_size=%llu B =%llu KB =%llu MB = %llu GB\n",
18*597ecc08STTaq totalsize,totalsize>>10,totalsize>>20, totalsize>>30);
19*597ecc08STTaq
20*597ecc08STTaq /* 2.获取一下剩余空间和可用空间的大小 */
21*597ecc08STTaq unsigned long long freeDisk = diskInfo.f_bfree * blocksize1; //剩余空间的大小
22*597ecc08STTaq unsigned long long availableDisk = diskInfo.f_bavail * blocksize1; //可用空间大小
23*597ecc08STTaq printf("Disk_free=%llu MB =%llu GB Disk_available=%llu MB = %llu GB\n",
24*597ecc08STTaq freeDisk>>20,freeDisk>>30,availableDisk>>20, availableDisk>>30);
25*597ecc08STTaq
26*597ecc08STTaq
27*597ecc08STTaq printf("====================\n");
28*597ecc08STTaq printf("diskInfo address: %p\n", diskInfo);
29*597ecc08STTaq printf("f_type= %lu\n", diskInfo.f_type);
30*597ecc08STTaq printf("f_bsize = %lu\n", diskInfo.f_bsize);
31*597ecc08STTaq printf("f_blocks = %d\n", diskInfo.f_blocks);
32*597ecc08STTaq printf("f_bfree = %lu\n", diskInfo.f_bfree);
33*597ecc08STTaq printf("b_avail = %d\n", diskInfo.f_bavail);
34*597ecc08STTaq printf("f_files = %d\n", diskInfo.f_files);
35*597ecc08STTaq printf("f_ffree = %lu\n", diskInfo.f_ffree);
36*597ecc08STTaq printf("f_fsid = %ld\n", diskInfo.f_fsid);
37*597ecc08STTaq printf("f_namelen = %ld\n", diskInfo.f_namelen);
38*597ecc08STTaq printf("f_frsize = %ld\n", diskInfo.f_frsize);
39*597ecc08STTaq printf("f_flags = %ld\n", diskInfo.f_flags);
40*597ecc08STTaq return 0;
41*597ecc08STTaq }