Android中statfs使用注意事项
2016-11-16 00:00
369 查看
1. 问题描述
在Android中初次使用statfs计算出的可用空间总是不对,经仔细析,发现是数据类型的问题。2. 关键数据结构
定义见sys/vfs.h/* note: this corresponds to the kernel's statfs64 type */ struct statfs { uint32_t f_type; uint32_t f_bsize; uint64_t f_blocks; uint64_t f_bfree; uint64_t f_bavail; uint64_t f_files; uint64_t f_ffree; __kernel_fsid_t f_fsid; uint32_t f_namelen; uint32_t f_frsize; uint32_t f_spare[5]; };
3. 常用数据类型长度
测试结果如下:sizeof(size_t)=4,sizeof(uint32_t)=4,sizeof(uint64_t)=8
size_t 定义为:
typedef unsigned int size_t; //sys/types.h中定义
4. 实现代码
uint32_t getFreeSizeMB(const char * path){ //如path为:/system struct statfs st; uint64_t sizeBytes; uint32_t availMb; if (statfs(path, &st) < 0) { SLOGE("***TRACE:%s(%d):statfs error: %s: %s\n",__FUNCTION__,__LINE__, path, strerror(errno)); return -1; } else { sizeBytes = st.f_bavail * (uint64_t)st.f_bsize; //关键 availMb = (uint32_t)(sizeBytes >> 20); //SLOGD("***TRACE:f_blocks=%lld,f_bfree=%lld,f_bsize=%ld,f_bavail=%lld",st.f_blocks,st.f_bfree,st.f_bsize,st.f_bavail); //SLOGD("***TRACE:%s(%d):path=%s:availMB=%ld",__FUNCTION__,__LINE__,path,availMb); //sizeBytes = st.f_bfree * (uint64_t)st.f_bsize; //availMb = (uint32_t)(sizeBytes >> 20); //SLOGD("***TRACE:%s(%d):path=%s:freeMB=%ld",__FUNCTION__,__LINE__,path,availMb); return availMb; } }
相关文章推荐
- Android中statfs使用注意事项
- 使用Android手机注意事项
- Android中关于线程使用的几点注意事项
- android:layout_weight属性使用注意事项
- Android使用AsyncTask设置请求超时的注意事项
- 使用TinyXML输出的XML文件在Android 下的注意事项
- 使用Tortoise SVN版本控制Android项目in eclipse的注意事项
- 【android】使用CursorAdapter注意事项
- 关于Android模拟键盘使用的注意事项
- Android使用ListView注意事项
- 使用Eclipse开发Android源码的一些注意事项
- 关于android:layout_weight属性使用注意事项
- [Android学习笔记]使用Android Junit进行测试的注意事项
- Android之screenOrientation和configChanges使用和注意事项
- Android开发 WebView使用注意事项
- C++在android上的使用注意事项
- 使用Tortoise SVN版本控制Android项目in eclipse的注意事项
- Android中关于线程使用的几点注意事项
- android 新手使用时的一些小注意事项
- android有关SharedPreferences的使用方法及注意事项