代码之家  ›  专栏  ›  技术社区  ›  Alex Xander

如何在C中实现我自己的基本UNIX外壳?

  •  23
  • Alex Xander  · 技术社区  · 15 年前

    我是处理和线程管理的新手。我的壳应该明白 PATH 环境变量。它可以被设置和修改。它以两种方式运行-交互式批处理模式。shell能够执行ls;ps;wc file;cal等多个任务。我也要把信号弄脏。所以我也应该处理^K,^C。

    我知道我将不得不使用执行器,叉子和管道,但只是无法开始。

    3 回复  |  直到 9 年前
        1
  •  14
  •   Supertux    15 年前

    所有的unix shell都是开源的,所以最好从阅读代码开始。

    如果你想找一篇关于这个主题的好文章,试试 Writing Your Own Shell 来自Linux公报。

    另一个好的起点是查看 mini-shell 只是因为它是最能让你清醒的地方之一。

        2
  •  8
  •   DigitalRoss    9 年前

    你的主循环是:

    • 读一行(用 fgets(3) 对于一个简单的外壳, readline(3) 一个花哨的)
    • 解析命令
    • 分叉并执行管道

    要解析命令,有两种常见的选择。编写递归下降分析器或使用 yacc(1) 生成一个。使用 yacc 但是,你完全可以被卡住调试它真的想要上下文无关。我更喜欢递归下降,但世界上几乎所有人都喜欢使用yacc。(从技术上讲, bison )如果外壳真的很简单,就像家庭作业外壳,yacc可能有点过头了。

    要进行词法分析,您还可以自己滚动或使用Flex。

    您不需要使用任何线程。

        3
  •  4
  •   Jonathan Leffler    9 年前

    许多描述主要系统调用的unix书籍还实现了一个shell,以说明如何以及为什么可以使用各种调用。史蒂文斯和罗奇金是两本这样的书: