- 论坛徽章:
- 0
|
5可用积分
下面是一个关于解释器的问题:
/* 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);
}
return 0;
}
编译:gcc -o showargs showargs.c
我们在同一个目录下再写一个脚本:
代码:
#!/home/kiron/showargs addargs
这个脚本我们命名为testexec
/* Program source : mytest.c *
* Program name : mytest */
#include <stdio.h>
int
main(void)
{
execl("/home/kiron/testexec", "testexec", "arg1", "arg2", (char *) 0);
return 0;
}
编译:gcc -o mytest mytest.c
执行:
代码:
$ ./mytest
arg[0]: /home/kiron/showargs
arg[1]: addargs
arg[2]: /home/kiron/testexec
arg[3]: arg1
arg[4]: arg2
问题来了,execl("/home/kiron/testexec", "testexec", "arg1", "arg2", (char *) 0)这里面的"testexec“这个参数没有输出啊,跑哪去了?
我试过把这句话改成execl("/home/kiron/showargs", "mygod", "arg1", "arg2", (char *) 0)然后运行mytest,输出为mygod arg1 arg2,
这说明mygod这个参数还是有传给被execl调用的进程啊,那上面那个怎么没有输出testexec呢?
谢谢! |
最佳答案
查看完整内容
我说一个稍微离题,但相关的有趣问题。#! 来引用一个解析器,这个解析器通常要把 # 作为行注释符,这样解析器才能忽略这一行。如果解析器不把 #!,则不能这样写。有时候能绕过去,比如 scheme:#! comment !# ,但后面那个 !# 要另起一行,否则会被当成参数传给 guile .
|