-1

我试图通过解释器文件执行程序。我在 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 错误”)。

我究竟做错了什么?

4

1 回答 1

1

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

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

PS1:我怎么猜的?

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

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

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

  1. 打印errno,perror()很有用。

  2. 这个错误是从哪里来的exec*(),你可以尝试直接通过shell执行来看看会发生什么

    $ /home/alien/testinterp arg1

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

    strace -ff path_to_your_program

于 2012-08-08T06:25:09.293 回答