执行解释程序文件时出错

时间:2012-08-08 01:58:42

标签: c exec executable interpreter

我试图通过解释器文件执行程序。我在C中使用了fork()和execl()函数。这是我的代码:

    if ((pid = fork()) < 0)
        printf("fork error");
    else if (pid == 0) {     /* child */
        if (execl( "/home/alien/testinterp",         /* the interpreter file */
                   "testinterp", "arg1", (char *)0) < 0)
            printf("execl error");

在文件“/ home / alien / testinterp”中,有:

#!/bin/sh

我可以在shell中运行/ bin / sh。我使用Emacs编辑了解释器文件。

当我运行程序时,我会输入错误。(“execl error”)。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

借助问题帖子的评论,回答是:

/home/alien/testinterp不可执行,因此向此文件添加可执行位将解决问题:chmod +x /home/alien/testinterp

PS1 :我怎么猜?

  

我使用Emacs编辑了解释器文件

我猜这个文件可能是新创建的,没有可执行位。

PS2 :猜测不能真正解决问题,有什么更好的方法?

  1. 打印errnoperror()非常有用。

  2. 此错误来自exec*(),你可以尝试直接通过shell执行它来显示会发生什么

    $ / home / alien / testinterp arg1

  3. 某些函数如exec*()fork()是syscall的包装器,您可以使用strace在调用系统调用时显示信息。

    strace -ff path_to_your_program