gpt4 book ai didi

linux - 需要深入了解编写操作系统 Shell 类(class)

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:51 24 4
gpt4 key购买 nike

我有几个问题,作业可以看这里:http://www.cs.uic.edu/~i385/

这些问题不需要您给我编码答案,而是问题,以便我可以更好地理解作业。

  1. 我已经读过这份文档几次了,但我没有看到我需要实现的命令列表。是否存在少量 shell 命令?如果是这样,我在哪里可以看到它们的完整列表。如果有很多,那么这个程序是否应该模拟一个 shell,它接受您的输入,解析它,然后将其传递到实际的操作系统?如果是这种情况,有人可以链接我将使用什么函数来完成此任务吗?

  2. 链接页面上的列表讨论了 Fork 和 Exec 等命令以及手册页,这些是我要在实际代码中使用的函数,以便我的程序正确完成其工作,对吗?

  3. 上述作业链接中有一段内容如下:

    Record user and system time of each child as it terminates. These should be reported for individual children as they complete, and a full history should be available by typing “stats”. The wait4 system call will return the desired information for a particular waited-for child. See the man page for getrusage for a full description of the rusage data structure.*

    我对我们应该关注的这个“用户”特别好奇记录,这是登录个人的实际登录名吗机器,或者我们在开始时使用的某种用户名 shell ?

  4. 我在康奈尔大学的网站上找到了这个,shell 的伪代码,内容如下:

.

int
main(int argc, char * * argv) {
while (1) {
int childPid;
char * cmdLine;

printPrompt();

cmdLine = readCommandLine(); //or GNU readline("");

cmd = parseCommand(cmdLine);

record command in history list(GNU readline history ? )

if (isBuiltInCommand(cmd)) {
executeBuiltInCommand(cmd);
} else {
childPid = fork();
if (childPid == 0) {
executeCommand(cmd); //calls execvp

} else {
if (isBackgroundJob(cmd)) {
record in list of background jobs
} else {
waitpid(childPid);

}
}
}
}
}

上面的逻辑流程对我来说很有意义,但我对这些事情有点迷失:

  1. 内置命令是什么意思?
  2. 如果它不是“内置”的,那么程序怎么知道要做什么?
  3. 最后,什么是后台作业?

最佳答案

(1) 您不需要命令列表。 shell 对所有外部命令本质上做同样的事情。请参阅exec系统调用系列。好的,内置 shell 命令有点不同,但我在您的作业中没有看到任何相关内容。

(2) 是的,家庭作业列出了一堆系统调用和 C 函数。您可能需要在某个地方使用它们。

(3) 它似乎没有询问您特定的用户帐户。 “用户”只是指谁在运行您的 shell,即您正在运行的进程(“命令”)的使用统计信息是什么。请参阅getrusage

(4) 我很快浏览了作业,但没有看到任何有关内置或后台进程的内容。除非您知道,否则现在不要担心,因为它们可能是 future 作业的一部分。

老实说,如果您如此迷茫,并且您的作业将在两天内到期,那么您确实有工作要做。

关于linux - 需要深入了解编写操作系统 Shell 类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com