我正在尝试编写一个最终会利用并发性的shell。现在我有一个工作的shell解析器,但我无法弄清楚如何执行命令。我看了一下exec
(execvp
等)看起来很有希望,但我有一些问题。
exec可以处理文件输入/输出重定向吗?我可以使用exec设置管道吗?
我也想知道子弹。子弹回归应该怎样;最后一个陈述的退出状态?子壳可以成为管道的一部分吗?
这些可能看起来真的是愚蠢的问题,但请耐心等待我的经验。
答案 0 :(得分:1)
exec可以处理文件输入/输出重定向吗?
不,您使用open()
和dup()
或dup2()
(以及close()
)执行此操作。
我可以使用exec设置管道吗?
不,您可以使用pipe()
,dup()
或dup2()
以及许多close()
来电。
我也想知道子弹。子壳返回什么,它的最后一个语句的退出状态?
这是正常的惯例,是的。
子壳可以成为管道的一部分吗?
是。在普通shell中,您可以编写如下内容:
(cd /some/where; find . -name '*.png') | sed 's/xyz/prq/' > mapped.namelist
如果您想害怕,可以调查posix_spawn()
及其支持功能。在POSIX 2008网站上搜索“spawn”,并准备好害怕。我认为实际的绘图工作实际上比使用posix_spawn()
及其支持者编纂它更容易。
答案 1 :(得分:1)