【问题标题】:Shell in the C Programming language [closed]C编程语言中的Shell [关闭]
【发布时间】:2011-11-04 07:45:55
【问题描述】:

我想用C语言在Linux操作系统下写一个shell。

在这个项目中使用的库和函数的名称是什么?

谢谢。

【问题讨论】:

  • 你想让图书馆做什么?
  • 请澄清一下,你想写一个完整的shell程序?你想从一个程序中调用一个shell命令?你想把数据传送到一个shell?
  • 你需要一个行编辑器(readline / libedit)、一些链接和双向链表助手、一个解析器(我强烈推荐柠檬)和很大的耐心。不幸的是,这个问题太宽泛了。如果您遇到特定问题,请随时提出。编写 shell 是一项很棒的练习,可以提高你的技能。我为 HelenOS 编写了 shell,这是我在编程时遇到的最有趣的事情。
  • 我想从一个程序中调用一个shell命令。

标签: c shell operating-system


【解决方案1】:

你可能至少会想要:

  • fork, execv - 用于调用子进程。
  • waitpid - 用于获取由 fork+exec 生成的死子进程。
  • sigaction - 用于将信号处理程序安装到:
    • 捕捉中断 (CTRL+C)。
    • 获取死子进程。
  • open - 用于在重定向到/从文件时打开文件。
  • dup2 - 用于在实现重定向时用打开的文件替换 STDIN/STDOUT。
  • pipe - 用于创建管道。

Single UNIX Specification Man Pages 是一个很好的资源,可以满足所需的任何附加功能。

【讨论】:

    【解决方案2】:

    我不明白你的问题。你正在开始一个新事物,你可以使用任何你想要的名字。而 Project 的概念通常特定于某些 IDE。

    要编写一个shell,你首先必须熟悉C编程语言,并且理解几个重要的Linux系统调用(如forkexecvepipechdirdup等) .所以先读一本关于这些的好教科书。系统调用可通过标准 C 库获得,您无需链接额外的。

    而且,研究小 shell(如 sash)的源代码可能会对您有很大帮助。

    【讨论】:

      【解决方案3】:

      实际上,这是一个有趣的问题,对于了解 Unix 的 IO 机制可能是一个很好的练习。您可能知道,Shell 负责解释 Input 、调用系统调用和显示输出。这样的程序运行在内核之上。所以,这个练习可能会提供很多关于流程执行族的信息,例如exec*

      这里是one tutorial c在 C 语言中为您服务,这个 one in Python 将帮助您设计一个快速原型以供理解。

      【讨论】:

      • shell 不会将其输入传递给内核。它解释其输入并相应地调用系统调用。
      • 我过于简单化了。已更正。
      【解决方案4】:

      不幸的是,您无法为此进行一些神奇的emulateShell() API 调用,您将需要(深入深入)研究exec、@987654323 之类的东西@、popensignal/sigaction 和许多其他过程控制的东西。

      此外,您可能还需要参与终端处理等工作,例如fcntlioctl

      这么大的答案框,并不是一个可以全面涵盖的主题。我建议尝试将其分解为较小的工作,以使您(和我们)的工作更轻松。

      也许从一个简单的程序开始,该程序接受来自用户的命令并将它们分解为令牌以供执行。这将是一个很好的第一步。

      【讨论】:

      • 我不确定他是否需要 popen,他需要了解 pipe 系统调用(以及其他)。 popen 就像 system,它使用一个 shell,不提供一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2013-06-19
      • 2011-08-20
      相关资源
      最近更新 更多