android linux层检测sd卡是否已经mount

107 篇文章 7 订阅


需要在底层去检测sd卡是否mount上

开机启动过程中,sd卡没有挂载上,/sdcard这个目录也是可写的,只是会把写入的数据都保存到ram里面.

注:

======> /android启动过程中,sdcard目录是先创建后mount的,

=======>比如,init进程解析init.ssd.rc文件并创建目录:mkdir /storage/sdcard0 0000 root root,但到vold进程才mount sdcard。

======>根据我测试未mount之前mkdir失败,但是statfs()读取是成功的,但返回f_type是RAMFS_MAGIC = 0x858458f6

直到sd卡mount上之后,数据才会写到sd卡里.

中间/sdcard文件系统的类型会从ramfs改变到msdos

  1. struct statfs {  
  2.   long f_type; /* 文件系统类型 */  
  3.   long f_bsize; /* 经过优化的传输块大小 */  
  4.   long f_blocks; /* 文件系统数据块总数 */  
  5.   long f_bfree; /* 可用块数 */  
  6.   long f_bavail; /* 非超级用户可获取的块数 */  
  7.   long f_files; /* 文件结点总数 */  
  8.   long f_ffree; /* 可用文件结点数 */  
  9.   fsid_t f_fsid; /* 文件系统标识 */  
  10.   long f_namelen; /* 文件名的最大长度 */  
  11.   };  

这个类型会在statfs的f_type中反映出来

所以我们只要调用statfs去检测/sdcard这个目录的文件系统类别就好了

只要f_type不是RAMFS_MAGIC = 0x858458f6


sd卡mount上之后得到的f_type是MS_DOS_MAGIC = 0x00004d44


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值