execl在其定义的程序作为参数传递时不起作用

时间:2014-03-18 15:48:12

标签: 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=execl("abc",NULL);
   printf("r = %d",r);
   return 0;
}

r = -1作为输出。请解释

谢谢:)

1 个答案:

答案 0 :(得分:1)

有几点需要注意:

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

  2. 最可能的原因是execl找不到程序abc - 它没有查看路径,可能没有#&# 39;看看当前目录。在第一个实例中,请尝试使用完整路径(例如execl( "/usr/me/abc", NULL );

  3. 它可能不会让它停止工作,但传统的方法是将程序的名称作为第一个参数传递(所以,execl( "/usr/me/abc", "/usr/me/abc", NULL );

  4. 如果您 execl工作,它将无法返回您的代码,告诉您它已经这样做了。