我目前正在尝试编写自己的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);
答案 0 :(得分:1)
最简单的方法可能就是创建一个无名管道。有关详细信息,请参阅man 3 pipe
。但基本上这个函数会创建两个fds:一个是只读的,另一个是只写的。无论一方写什么,都会在另一方面阅读。
然后将字符串写入管道的写入端,并将读取结束安装为新进程的STDIN。