4

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

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

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

4

2 回答 2

4

正在做

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

获取屏幕的输出。

于 2008-09-28T22:19:43.877 回答
2

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

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

于 2008-09-28T22:25:17.967 回答