【发布时间】:2014-05-10 14:38:29
【问题描述】:
我正在尝试使用执行文本解释器的 execl 函数打印命令行参数,但我无法打印第一个参数。
这是我的主程序
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
pid_t pid;
if((pid=fork())<0)
printf("error\n");
else if(pid==0)
if((execl("textinterpreter","this","is","usp","lab",(char*)0))<0)
perror("error in execl\n");
if(waitpid(pid,NULL,0) !=pid)
printf("error1\n");
system("ls > list");
return 0;
}
这是我的文本解释器文件
#!/home/chirag/echoarg1 my1
这是我的 echoarg1.c 文件
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
main(int argc,char *argv[])
{
int i;
for(i=0;i<argc;i++)
printf("argv[%d]=%s\n",i,argv[i]);
}
我得到的输出是
argv[0]=/home/chirag/echoarg1
argv[1]=my1
argv[2]=textinterpreter
argv[3]=is
argv[4]=usp
argv[5]=lab
预期输出在哪里
argv[0]=/home/chirag/echoarg1
argv[1]=my1
argv[2]=textinterpreter
argv[3]=this
argv[4]=is
argv[5]=usp
argv[6]=lab
谁能指出错误。
【问题讨论】:
-
我本来希望 argv[2] 是 "this" 和 "textinterpreter" 已被跳过。 execp 的第一个参数是不应在 argv 中传递的 file-path。剩下的参数,直到 NULL 指针,被填充到 argv[0]...
-
那么你能说出为什么会这样吗?
-
正如我所说,我对 execp 的理解是第一个参数不会传递到新程序的 argv 中。这与您报告的第二个参数未传入的情况不符。您使用的是哪种 Linux/Unix?
-
#34~precise1-Ubuntu 3.11.0-20-generic
-
看来 bash 解释器使用的是可执行路径,而不是传递的 arg0。