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


需要在底层去检测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

[cpp]  view plain copy print ?
  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


你可能感兴趣的:(android linux层检测sd卡是否已经mount)