Linux 中的 C Shell 简介
Posted
技术标签:
【中文标题】Linux 中的 C Shell 简介【英文标题】:Introduction To C Shells in Linux 【发布时间】:2015-04-22 10:10:59 【问题描述】:我对 C 语言中 Shell 的整个概念有一些疑问。这个学期我们必须学习C,但是我大学里的人的教学技能并不是那么好。所以对于第一个任务,我们必须创建一些 shell。不要误会我的意思,我喜欢编程,我不是要你完成我的任务,我只是想要一些帮助开始,因为我有点迷失在这里。
我要做的第一件事是用 C 语言创建一个 Shell(我认为与 linux shell 脚本不同)并在 Ubuntu 虚拟机上运行它。它处于 C 编程的早期阶段,我们正在学习有关父子进程的知识。我引用“这个 shell,将接受简单的单个命令。具体来说,它
a) 将从终端读取程序的标题,
b) 将创建一个新进程来运行刚刚读取的程序并
c) 将等待进程结束。
一旦进程结束,它将读取并执行下一个命令。例如,shell 将能够运行诸如“ls”之类的命令。这让我感到困惑,因为我不明白 shell 是什么以及它实际具有什么形式,并且在互联网上阅读并不能真正帮助我. 那么你能告诉我这应该是什么样子吗?我不明白它将如何运行或如何执行 ls 之类的命令。我们被指示在命令中使用 fork 和 strtok。
提前致谢!
【问题讨论】:
shell 基本上是一个命令行解释器。 是的,我意识到这一点,但这并不能帮助我实现代码。它是否像普通程序一样编写、编译和运行?如何让它运行类似“ls”的命令?我还没有理解 shell 的基本概念。 这是一个正常的程序。基本上它从缓冲区中读取一行(例如,使用fgets
函数),然后它将创建一个与该行内容相对应的进程。阅读this SO topic 应该会给你一些线索。
shell 是可以读取命令的程序。然后,它执行这些命令。 ls
是这些命令之一。所以基本上,你的任务是构建一个像基本 linux 命令行一样工作的程序。它像普通的 C 程序一样编写、编译和运行。但是当它运行时,会要求用户输入并“执行”这个输入来做用户告诉它做的事情
谢谢,这很有帮助!对于“ls”示例,我基本上是在运行程序时将 ls 或任何其他命令作为参数,然后用 strtok() 和 exec() 找到这个命令吗?
【参考方案1】:
Shell 是一个 C 程序。所以是的,它像标准的 c 程序一样编写、编译和运行。
还需要注意的是,ls
、wc
等命令也是程序。因此,当我们说“运行命令 ls”时,我们实际上的意思是“运行名称为 ls 的程序”。
现在这是有趣的部分:有一个名为exec( )
的函数可以帮助一个程序运行另一个程序。 (有一整套 exec 函数)
shell 的作用是这样的:
-
Shell 使用
fork ( )
系统调用来创建子进程。
一旦创建了子进程,shell 就会使用exec ( )
函数使子进程运行所需的命令(所需的程序)(例如:ls、wc)。
Shell 使用wait ( )
系统调用来完成子进程(以及命令)。
我上面描述的是一个非常简短的描述。并且上述 3 个步骤中的每一个都可能有一个或多个子步骤。
您可以使用 linux 中提供的手册页了解 fork()、exec() 和 wait()。
请在您的终端中输入以下命令以了解这些:
man 2 fork
man 3 exec
man 2 wait
这些可能会解决您的一些问题..
【讨论】:
非常感谢,这真的帮助我理解了!最后一个问题,我必须制作的 shell 应该执行诸如 ls 之类的命令,该命令位于 bin/ls iirc 中。因此,如果它必须执行,比如说,其中五个我不知道的命令(因为将要运行的命令取决于用户),我将如何查明并执行它们?通过 if 语句?我想这是不切实际的,而且肯定是不好的做法,因为我要检查的命令很多。以上是关于Linux 中的 C Shell 简介的主要内容,如果未能解决你的问题,请参考以下文章