- 论坛徽章:
- 2
|
一个二进制C程序,返回每一个参数argv[]:- /* Program source : showargs.c *
- * Program name : showargs */
- #include <unistd.h>
- int main(int argc, char *argv[])
- {
- int i;
- for(i = 0; i < argc; i++)
- {
- printf("arg[%d]: %s\n", i, argv[i]);
- }
- return 0;
- }
复制代码 在终端中 $ ./showargs xxx
有结果 :
arg[0]: ./showargs
arg[1]: xxx
//尽管exec函数的参数列表中第二个参数by convention是待执行文件的文件名,但此处忽略;
如果用execl()函数调用回显参数的程序showargs- execl("/home/hit/showargs","xxx",NULL);
复制代码 时,
结果:
arg[0]: xxx
我的问题是,第二次,arg[0]怎么不是 "/home/hit/showargs" 这个可执行文件自身的文件名? 而第一次的argv[0]就是它的文件名啊?
难道第一次,shell把所有的参数 “ ./showargs xxx ”通过execl()传给了回显程序 而第二次我们自己直接调用execl()时只传了"xxx"的原因?
如果不是,这到底是怎么实现的呢?
谢谢!
|
|