需要在底层去检测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
- struct statfs {
- long f_type; /* 文件系统类型 */
- long f_bsize; /* 经过优化的传输块大小 */
- long f_blocks; /* 文件系统数据块总数 */
- long f_bfree; /* 可用块数 */
- long f_bavail; /* 非超级用户可获取的块数 */
- long f_files; /* 文件结点总数 */
- long f_ffree; /* 可用文件结点数 */
- fsid_t f_fsid; /* 文件系统标识 */
- long f_namelen; /* 文件名的最大长度 */
- };
这个类型会在statfs的f_type中反映出来
所以我们只要调用statfs去检测/sdcard这个目录的文件系统类别就好了
只要f_type不是RAMFS_MAGIC = 0x858458f6
sd卡mount上之后得到的f_type是MS_DOS_MAGIC = 0x00004d44