【发布时间】:2019-05-31 19:55:00
【问题描述】:
我的任务是用 C 编写一个非常简单的 shell。我没有给出很多资源,而且我刚刚开始学习 C,我只使用了 scanf() 和 printf() 并编写了简单的函数。我只知道它应该用fork() 和不同的exec() 编写。我花了很多时间分析其他shell,但我不了解程序的结构和一些功能,例如:
- 解析,为什么需要解析?如果我知道我不会在命令中使用参数,我只想将输入与我自己的函数(如
help()或date())进行比较并执行它们。 - 读取用户输入。使用
fgets(),然后使用strcmp()? - 正在执行,它是如何工作的?
execvp()如何知道用户输入是我的main中的命令(函数)或我的程序文件夹中的程序?
【问题讨论】:
-
把它分解成更小的部分,并一个一个地学习每个小部分。例如,
fork做什么?它返回什么?它是如何工作的?什么是父进程和子进程?试验fork和进程,直到你了解它的工作原理。然后,当您了解fork时,请继续下一部分。等等。在你知道它之前,你将对每个小部分有足够的了解,它变成一个简单的谜题,你所要做的就是把各个部分放在一起。和here's some very related reading 关于那个主题。 -
exec 接受参数列表。解析是将您的命令字符串转换为该列表的原因。
-
建议:避免scanf。您将花费大量时间调试格式字符串的神秘问题,而不会学到任何有用的东西。使用
fread和fgetc系列函数作为您的输入。学习使用这些会更有用。