【发布时间】:2026-01-27 09:00:01
【问题描述】:
我有一个项目需要使用 exec 系列。我的项目包括制作一个交互式外壳。 shell 会实现一些基本的命令,比如 cd、ls、echo 等。我一直在研究 exec 的使用,但还没有找到有用的站点。任何建议的链接都会有所帮助。
int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);
如何让这个操作的输出显示在屏幕上?
【问题讨论】:
我有一个项目需要使用 exec 系列。我的项目包括制作一个交互式外壳。 shell 会实现一些基本的命令,比如 cd、ls、echo 等。我一直在研究 exec 的使用,但还没有找到有用的站点。任何建议的链接都会有所帮助。
int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);
如何让这个操作的输出显示在屏幕上?
【问题讨论】:
在做
int fd = 1;
dup(fd);
close(fd);
获取屏幕输出。
【讨论】:
您编写的代码在一个简单的测试程序中为我工作,它什么都不做。请记住,当您调用 execl 时,该进程会保留所有旧文件句柄。因此,无论您调用 execl 时的标准输出是什么,在加载新的二进制文件时它都将是相同的。如果您只想将输出发送到终端,只需确保 stdout 发送到终端即可。
如果你想用另一个程序做 I/O,popen 很适合这个(正如 mgb 提到的)。它将派生一个新进程,为您设置管道,调用一些 exec 变体,并返回一个可用于通信的文件句柄。
【讨论】: