【问题标题】:Error at execl: No such file or directory执行错误:没有这样的文件或目录
【发布时间】:2020-11-03 01:32:31
【问题描述】:

这是我们教授给我们的 execl() 示例。一个文件夹里有2个文件,com1.c的样子

#include <stdio.h>
#include <unistd.h>

int main(){
    printf("hello...");
    fflush(stdout);
    execlp("com2","com2",(char*)NULL);
    perror("err at execl");
    return 1;
}

com2.c 看起来像

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main(){
    write(1, "...you unicorn ;)",13);
    return 0;
}

在运行时它给了我这个消息: hello...err at execl: No such file or directory

我怎样才能得到“你好......你独角兽;” ? 期待感谢。

【问题讨论】:

  • 您是否构建了一个名为 com2 的可执行文件并将其放在 PATH 中的目录中?

标签: c exec


【解决方案1】:

确保包含com2 的目录在您的PATH 环境变量中。

PATH=$PATH:/path/to/directory

其中/path/to/directory 是您放置com2 的目录。

【讨论】:

  • 有没有办法让 com2.c 在不更改 PATH 的情况下覆盖 com1.c? com1.c 和 com2.c 在同一个目录中,据我了解,这意味着我不必更改 PATH
  • 取决于操作系统。
【解决方案2】:

您尚未指定您正在运行的操作系统...但是,一般来说,包含您要执行的程序的目录应该在您的 $PATH 中:

https://linux.die.net/man/3/execlp

execlp()、execvp() 和 execvpe() 函数复制操作 如果指定了在搜索可执行文件时的 shell 文件名不包含斜杠 (/) 字符。该文件在 PATH 中指定的以冒号分隔的目录路径名列表 环境变量。

如果未定义此变量,则路径列表 默认为当前目录,后跟目录列表 由 confstr(_CS_PATH) 返回。 (这个confstr(3) 调用通常返回 值“/bin:/usr/bin”。)如果指定的文件名包含斜杠 字符,则 PATH 被忽略,并且指定的文件 路径名被执行。

注意:

在其他一些系统上,默认路径(当环境 不包含变量 PATH) 具有当前工作目录 列在 /bin 和 /usr/bin 之后,作为反木马措施。 Linux 这里使用传统的“当前目录优先”默认路径。

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 2021-10-31
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2013-08-08
    • 2013-11-04
    • 2012-02-18
    相关资源
    最近更新 更多