【问题标题】:The exec family高管家族
【发布时间】:2026-01-27 09:00:01
【问题描述】:

我有一个项目需要使用 exec 系列。我的项目包括制作一个交互式外壳。 shell 会实现一些基本的命令,比如 cd、ls、echo 等。我一直在研究 exec 的使用,但还没有找到有用的站点。任何建议的链接都会有所帮助。

int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);

如何让这个操作的输出显示在屏幕上?

【问题讨论】:

    标签: c process exec


    【解决方案1】:

    在做

    int fd = 1;
    dup(fd);
    close(fd);
    

    获取屏幕输出。

    【讨论】:

      【解决方案2】:

      您编写的代码在一个简单的测试程序中为我工作,它什么都不做。请记住,当您调用 execl 时,该进程会保留所有旧文件句柄。因此,无论您调用 execl 时的标准输出是什么,在加载新的二进制文件时它都将是相同的。如果您只想将输出发送到终端,只需确保 stdout 发送到终端即可。

      如果你想用另一个程序做 I/O,popen 很适合这个(正如 mgb 提到的)。它将派生一个新进程,为您设置管道,调用一些 exec 变体,并返回一个可用于通信的文件句柄。

      【讨论】: