execl在其所在的程序';已定义的作为参数传递

execl在其所在的程序';已定义的作为参数传递,c,linux,exec,C,Linux,Exec,下面的代码在linux上另存为abc.c。它的execl()在下面的代码中不起作用。谁能解释一下原因吗 #include<stdio.h> #include<unistd.h> #include<sys/time.h> int main() { int r; char ch; printf("Enter any character"); scanf(" %c",&ch); printf("%c",ch); r=exe

下面的代码在linux上另存为abc.c。它的execl()在下面的代码中不起作用。谁能解释一下原因吗

#include<stdio.h>
#include<unistd.h>
#include<sys/time.h>
int main()
{
   int r;
   char ch;
   printf("Enter any character");
   scanf(" %c",&ch);
   printf("%c",ch);
   r=execl("abc",NULL);
   printf("r = %d",r);
   return 0;
}
#包括
#包括
#包括
int main()
{
INTR;
char ch;
printf(“输入任何字符”);
scanf(“%c”和“ch”);
printf(“%c”,ch);
r=execl(“abc”,空);
printf(“r=%d”,r);
返回0;
}
r=-1作为输出。请解释一下

谢谢:)

需要注意的几件事:

  • 当您调用这样一个返回错误的函数时,请检查
    errno
    以查看它是什么(例如
    printf(“r=%d errno=%d”,r,errno);

  • 最可能的原因是
    execl
    找不到程序
    abc
    ——它不在路径上查找,也可能不在当前目录中查找。首先,尝试使用完整路径(例如
    execl(“/usr/me/abc”,NULL);

  • 它可能不会停止工作,但传统的做法是将程序名作为第一个参数传递(因此,
    execl(“/usr/me/abc”,“/usr/me/abc”,NULL);

  • 如果您确实让
    execl
    工作,它不会返回到您的代码来告诉您它这样做了


  • 更改为
    execl(“./abc”,(char*)空);
    并检查
    errno
    以确定失败的原因。我尝试过。/abc,即使这样也不起作用。需要键入NULL??我在其他程序中从未这样做过。好的,我将检查错误号。感谢From:参数列表必须由NULL指针终止,并且,由于这些是可变函数,因此此点ter必须为强制转换(char*)NULL。