如何重定向字符串以替换STDIN_FILENO文件描述符?

时间:2014-11-16 21:57:58

标签: c++ bash

我目前正在尝试编写自己的bash shell,并且输入输出重定向工作正常,但我在实现“<<<”时遇到了问题。

例如,如果我输入cat <<< "Hello world",它应显示“Hello world”。

对于其他io重定向器,例如&lt;和&gt;,我一直在使用open和dup系统调用,但它不适用于此,除非我创建一个临时文本文件。

有没有办法在不创建临时文件的情况下执行此操作?

我试过

int fd[2];
pipe(fd);
write(fd[1], string, strlen(string));
dup2(fd[1], 0);

1 个答案:

答案 0 :(得分:1)

最简单的方法可能就是创建一个无名管道。有关详细信息,请参阅man 3 pipe。但基本上这个函数会创建两个fds:一个是只读的,另一个是只写的。无论一方写什么,都会在另一方面阅读。

然后将字符串写入管道的写入端,并将读取结束安装为新进程的STDIN。