我对C语言中Shell的整个概念有一些疑问。在这个学期,我们必须学习C,但是我的大学里的人们的教学技巧并不是很好。所以对于第一个任务,我们必须创建一些shell。别在这里弄错了,我喜欢编程,我不是要求你完成我的作业,我只是想帮助你开始,因为我有点迷失在这里。
我要做的第一件事是用C语言创建一个Shell(我认为不同于linux shell脚本)并在Ubuntu虚拟机上运行它。它处于C编程的早期阶段,我们正在学习有关父子进程的知识。我引用"这个shell,将接受简单的单个命令。具体来说,它
a)将从终端读取节目的标题,
b)将创建一个新进程来运行刚刚读取的程序
c)将等待该过程结束。
一旦过程结束,它将读取并执行下一个命令。例如,shell将能够运行像" ls" &#34 ;.这让我感到困惑,因为我不了解外壳是什么以及它实际上有什么形式,在互联网上阅读并没有真正帮助我。 那么请你告诉我这应该是什么样的?我不明白它将如何运行或如何执行像ls这样的命令。我们已被指示使用fork和strtok作为命令。
提前致谢!
答案 0 :(得分:0)
Shell是一个C程序。所以是的,它是像标准的c程序一样编写,编译和运行的。
同样重要的是要注意ls
,wc
等命令也是程序。因此,当我们说"运行命令ls"时,我们实际上是指"运行名称为ls"的程序。
现在这是有趣的部分:有一个名为exec( )
的函数可以帮助程序运行另一个程序。 (有一整套exec函数)
这是什么shell:
fork ( )
系统调用来创建子进程。 exec ( )
函数使子进程运行所需的命令(所需程序)(例如:ls,wc)。wait ( )
系统调用来完成子(以及命令)。 我上面描述的是一个非常简短的描述。并且上述3个步骤中的每一个可以具有一个或多个子步骤。
您可以使用linux中提供的手册页了解fork()和exec()以及wait()。
请在终端输入以下命令以了解这些:
man 2 fork
man 3 exec
man 2 wait
这些可能会清除你的一些问题..