从rm到linux虚拟文件系统

白癜风专家坐诊 http://pf.39.net/bdfyy/zqbdf/200921/8231855.html

后端有时候rm,会出现一些问题。

这里作为一个子问题,讨论一下rm之后,发生的一些事。

打开rm源码:

[qianzichen

dev03v/src/app/coreutils/coreutils-8.21]visrc/rm.c

从main函数开始:

intmain(intargc,char**argv){...while((c=getopt_long(argc,argv,"dfirvIR",long_opts,NULL))!=-1){switch(c){casef:x.interactive=RMI_NEVER;break;...}}...enumRM_statusstatus=rm(file,x);}

首先解析命令行参数,然后调用了rm:

enumRM_statusstatus=rm(file,x);

作者把rm函数的实现从rm.c中抽了出来,放在remove.c中:

/*RemoveFILEs,honoringoptionsspecifiedviaX.ReturnRM_OKifsuccessful.*/enumRM_statusrm(char*const*file,structrm_optionsconst*x){enumRM_statusrm_status=RM_OK;if(*file){FTS*fts=xfts_open(file,bit_flags,NULL);while(1){...}}...}

file参数是一个只读指针数组,代表要删除的文件名列表,x参数的结构定义如下,存储从命令行中解析后的rm的选项。

structrm_options{/*Iftrue,ignorenonexistentfiles.*/boolignore_missing_files;/*Iftrue,querytheuseraboutwhethertoremoveeachfile.*/enumrm_interactiveinteractive;.../*Iftrue,recursivelyremovedirectories.*/boolrecursive;boolrequire_restore_cwd;};

当file列表存在时,rm调用xfts_open:

FTS*xfts_open(char*const*argv,intoptions,int(*



转载请注明地址:http://www.gongjingmilanagjml.com/glyy/5857.html
  • 上一篇文章:
  • 下一篇文章:
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章