高管家庭

时间:2020-03-06 14:51:12  来源:igfitidea点击:

我有一个需要使用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的某些变体,并返回可用于通信的文件句柄。