Android系统在shell中的df命令实现
当我们在shell中敲击df这条命令的时候,会看到:
root@android:/#df FilesystemSizeUsedFreeBlksize /dev446.8M36.0K446.8M4096 /mnt/secure446.8M0.0K446.8M4096 /mnt/asec446.8M0.0K446.8M4096 /mnt/cart0446.8M0.0K446.8M4096 /mnt/obb446.8M0.0K446.8M4096 /system1.5G376.6M1.1G1024 /data5.2G188.9M5.0G4096 /cache124.0M16.1M107.9M4096 /mnt/.cci503.9M16.4M487.6M4096 /storage/sdcard05.2G188.9M5.0G4096 /mnt/external_sd7.5G475.0M7.0G4096
那么,这是怎么实现的呢?
其实很简单,就是利用statfs这个函数查询文件系统相关的信息,然后依次列举出来。
如果使用这个函数?
请看下文:
http://baike.baidu.com/link?url=EVV8n-l-DXfgNwYj5Lqzo0HFvYaXMYEzTBMVtuyrq0QCvpaD0Lr0RjX81L6jTE6RXplNC_cNec8tgdsDleX2pq
那么df是怎么实现的?请看源码df.c
#include#include #include #include #include staticintok=EXIT_SUCCESS; //根据挂载的文件的大小来计算 staticvoidprintsize(longdoublen) { charunit='K'; n/=1024; if(n>1024){ n/=1024; unit='M'; } if(n>1024){ n/=1024; unit='G'; } printf("%-4.1Lf%c",n,unit); } staticvoiddf(char*s,intalways){ // structstatfsst; //statfs函数可用来查询文件系统相关的信息。 if(statfs(s,&st)<0){ fprintf(stderr,"%s:%s\n",s,strerror(errno)); ok=EXIT_FAILURE; }else{ if(st.f_blocks==0&&!always) return; printf("%-20s",s); printsize((longdouble)st.f_blocks*(longdouble)st.f_bsize); printf(""); printsize((longdouble)(st.f_blocks-(longdouble)st.f_bfree)*st.f_bsize); printf(""); printsize((longdouble)st.f_bfree*(longdouble)st.f_bsize); printf("%d\n",(int)st.f_bsize); } } intdf_main(intargc,char*argv[]){ printf("FilesystemSizeUsedFreeBlksize\n"); if(argc==1){ chars[2000]; //挂载的文件都在/proc/mounts下显示 FILE*f=fopen("/proc/mounts","r"); while(fgets(s,2000,f)){ char*c,*e=s; for(c=s;*c;c++){ if(*c==''){ e=c+1; break; } } for(c=e;*c;c++){ if(*c==''){ *c='\0'; break; } } df(e,0); } fclose(f); }else{ inti; for(i=1;i 总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接