xref: /DragonOS/user/apps/test_fstatfs/main.c (revision 597ecc08c2444dcc8f527eb021932718b69c9cc5)
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 }