int main( int argc, char *argv[] ) 在这个定义中,argc 是传递进来的参数的个数(参数数量),而argv 是一个字符串数组,代表从命令行传递进来的参数(参数向量)。argv 的索引 0 是从命令行调用的程序名。 清单 2 给出的这个简单 C 程序展示了 BusyBox 的调用。它只简单地打印argv 向量的内容。 清单 2. BusyBox 使用 argv[0] 来确定调用哪个应用程序
// test.c#include <stdio.h>int main( int argc, char *argv[] ){ int i; for (i = 0 ; i < argc ; i++) { printf("argv[%d] = %s\n", i, argv[i]); } return 0;} 调用这个程序会显示所调用的第一个参数是该程序的名字。我们可以对这个可执行程序重新进行命名,此时再调用就会得到该程序的新名字。另外,我们可以创建一个到可执行程序的符号链接,在执行这个符号链接时,就可以看到这个符号链接的名字。清单 3. 在使用新命令更新 BusyBox 之后的命令测试
$ gcc -Wall -o test test.c$ ./test arg1 arg2argv[0] = ./testargv[1] = arg1argv[2] = arg2$ mv test newtest$ ./newtest arg1argv[0] = ./newtestargv[1] = arg1$ ln -s newtest linktest$ ./linktest argargv[0] = ./linktestargv[1] = arg BusyBox 使用了符号链接以便使一个可执行程序看起来像很多程序一样。对于 BusyBox 中包含的每个工具来说,都会这样创建一个符号链接,这样就可以使用这些符号链接来调用 BusyBox 了。BusyBox 然后可以通过argv[0] 来调用内部工具。 配置并编译 BusyBox
我们可以从 BusyBox 的 Web 站点上下载最新版本的 BusyBox(请参看参考资料一节的内容)。与大部分开放源码程序一样,它是以一个压缩的 tarball 形式发布的,我们可以使用清单 4 给出的命令将其转换成源代码树。(如果我们下载的版本不是 1.1.1,那就请在这个命令中使用适当的版本号以及特定于这个版本号的命令。) 清单 4. 展开 BusyBox
$ tar xvfz busybox-1.1.1.tar.gz$ 结果会生成一个目录,名为 busybox-1.1.1,其中包含了 BusyBox 的源代码。要编译默认的配置(其中包含了几乎所有的内容,并禁用了调试功能),请使用defconfig make 目标: | | | |