当前位置:  技术问答>linux和unix

关于一个参数解析的问题

    来源: 互联网  发布时间:2016-05-21

    本文导语:  在insmod.c中看到如下代码:      /* For common 3264 code, only compile main in the 64 bit version. */      #if defined(COMMON_3264) && defined(ONLY_32)      /* Use the main in the 64 bit version */      #else      /* This ma...

在insmod.c中看到如下代码:

     /* For common 3264 code, only compile main in the 64 bit version. */
     #if defined(COMMON_3264) && defined(ONLY_32)
     /* Use the main in the 64 bit version */
     #else
     /* This mainline looks at the name it was invoked under, checks that the name
      * contains exactly one of the possible combined targets and invokes the
      * corresponding handler for that function.
      */
1952 int main(int argc, char **argv)
1953 {
1954         /* List of possible program names and the corresponding mainline routines */
1955         static struct { char *name; int (*handler)(int, char **); } mains[] =
1956         {
1957                 { "insmod", &insmod_main },
1958         #ifdef COMBINE_modprobe
1959                 { "modprobe", &modprobe_main },
1960         #endif
1961         #ifdef COMBINE_rmmod
1962                 { "rmmod", &rmmod_main },
1963         #endif
1964         #ifdef COMBINE_ksyms
1965                 { "ksyms", &ksyms_main },
1966         #endif
1967         #ifdef COMBINE_lsmod
1968                 { "lsmod", &lsmod_main },
1969         #endif
1970         #ifdef COMBINE_kallsyms
1971                 { "kallsyms", &kallsyms_main },
1972         #endif
1973         };
1974         #define MAINS_NO (sizeof(mains)/sizeof(mains[0]))
1975         static int mains_match;
             static int mains_which;
1976
1977
1978         char *p = strrchr(argv[0], '/');
1979         char error_id1[2048] = "The ";                  /* Way oversized */
1980         char error_id2[2048] = "";              /* Way oversized */
1981         int i;
1982
1983         p = p ? p + 1 : argv[0];
1984
1985         for (i = 0; i  1) {
2015                 error("%s has an ambiguous name, it must contain %s%s.",
2016                          error_id1, MAINS_NO == 1 ? "" : "exactly one of ", error_id2);
2017                 return(1);
2018        }
2019        else
2020                 return((mains[mains_which].handler)(argc, argv));
2021 }
2022 #endif /* defined(COMMON_3264) && defined(ONLY_32) */


该段代码好像是根据对使用的命令名进行字符串匹配,然后调用相应的函数,也就是把lsmod,rmmod等整合到了一起。。。但是如果这样理解的话lsmod,rmmod命令应该指向的是用一个文件,但是我查了下似乎不是这样。。。奇怪???

|
这是busybox的代码,你应该注意到busybox编译出来的东西,它是使用链接的方式
比如lsmod,它不是一个可执行程序,而是一个指向busybox的链接,当你执行lsmod的时候程序内的argv[0]将是lsmod,而不是busybox

|
链接是Linux下很常用的用法,不要感到奇怪。其实busybox所有命令都是一个可执行文件完成的。你敲的命令都是月个软链接。

    
 
 

您可能感兴趣的文章:

  • 深入解析Oracle参数及参数文件
  • C++命令行参数解析器 CLPP
  • 命令行参数解析类库 args4j
  • 命令行参数解析框架 Climax
  • 命令行参数解析工具包 CmdOption
  • C++命令行参数解析器 CLPP iis7站长之家
  • 引用参数和传值参数的区别深入解析
  • 命令行参数解析类库 Arg_parser
  • 命令行参数解析包 SimpleOpt
  • 解析:ClickOnce通过URL传递参数 XXX.application?a=1
  • shell自定义函数及参数调用解析
  • js正则解析URL参数示例代码
  • java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)
  • C++中函数的默认参数详细解析
  • JSP中js传递和解析URL参数以及中文转码和解码问题
  • 解析C#中的ref和out参数
  • 解析sizeof, strlen, 指针以及数组作为函数参数的应用
  • 解析web.xml中在Servlet中获取context-param和init-param内的参数
  • C/C++宏定义的可变参数详细解析
  • c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
  • 问一个关于在shell中调用内置命令时参数的问题?参数从空格处被断开
  • shell参数问题 if [ x$current == x$required ]; 中参数前的x是什么意思
  • 关于参数的小问题!非常菜的问题!
  • 函数参数入栈顺序以及参数地址间隔的问题
  • 有关硬盘参数的死问题,100分!
  • 关于gcc -fno-strict-prototype 参数的问题
  • 编译参数问题,初学者的问题,请多帮忙
  • Linux0.11 内核源码 main函数的参数问题
  • 请教高手glade中的参数问题
  • corba枚举类型参数传递问题?(大笨鸟问题)
  • ### shell awk 参数问题!! --- 急啊 ----
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python函数默认参数和字典参数及可变参数(带星号参数)
  • applet传参数到serlvet,后,如果参数后面有空格,则后面的参数。。。
  • ndk下编译ffmpeg的configure命令及配置参数
  • 在页面间传递参数时,接受参数的页面如何读取参数值啊??在线等待……
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • 做网页有时会用到"HTTP_USER_AGENT"或"REMOTE_ADDR"这样的参数,这到底是一个什么参数,如何得知这一类参数的全部信息?谢谢
  • c++模板(Template)介绍及模板参数中包含模版
  • c# 可选参数、命名参数
  • C++可变参数模板(variadic template)详细介绍及代码举例
  • 有谁知道命令后加-的参数和不加-的参数有什么不同?
  • ​Docker 1.12.0 改进了服务的负载均衡参数
  • 如何实现linux下ant调用sh(带输入参数),参数自动填入并执行sh
  • linux/centos源码安装nginx编译配置选项参数介绍
  • ls --color[=when] 参数为never always auto,这三个参数分别什么意思。
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • url能传递参数吗?怎样才能传递参数(比如查询结果)
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • 我想在?好后面传递参数,参数中包含汉字时。就出现乱码。我该怎么办?
  • shell 参数数目不固定如何遍历(主要原因是包含带空格的参数)
  • shell创建一个带参数的文件名,这个参数怎么不显示出来backup$BDATE.dump
  • 请问方法中参数个数相同但参数类型不同,该算是overload(重载)吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3