我正在一点一点地研究我自己的shell,并最终实现了I/O重定向功能。我已经完成了>、<和>>的实现。我被困在实现<<<上了。
我尝试过的<<<实现在概念上非常简单。创建一个名为herestring的文件,将该字符串写入文件中,将文件描述符设置为STDIN_IN,然后执行命令,然后删除该文件。
该文件的目的基本上是存储字符串。正在成功创建和删除该文件。即使是在文件中写入字符串也是有效的。但是,当我在自己的shell中执行以下命令时:
cat <<< Hello,world!实际结果:
cat: -: Bad file descriptor期望值:
Hello,world!这真的很奇怪,因为我基本上重用了输入重定向(command < file)的实现,并且我添加的唯一部分是可以工作的部分。所以我真的对我的代码中缺少的东西感到迷惑。
如果需要更多代码,请让我知道。
发布于 2019-05-15 04:01:06
根据man creat的说法,调用creat()等同于使用等于O_CREAT|O_WRONLY|O_TRUNC的标志调用open()。
在您的情况下,O_CREAT和O_TRUNC是有意义的。O_WRONLY并非如此。
我建议使用带有O_CREAT|O_RDWR|O_TRUNC标志的open()
您所展示的代码的其他问题:(这不是一个完整的列表!!)
fd 如果您打算将here-string保存到一个文件中,那么您应该学习有关如何在文件系统中创建匿名文件的O_TMPFLAG。这样就不需要调用remove(),当文件的所有文件描述符都关闭时,该文件将被自动删除。
https://stackoverflow.com/questions/56137085
复制相似问题