-1

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

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

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

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

  3. 上述分配链接中有一段内容如下:

    记录每个孩子终止时的用户和系统时间。这些应该在个别孩子完成时报告,并且应该通过键入“stats”来获得完整的历史记录。wait4 系统调用将返回特定等待孩子的所需信息。getrusage有关数据结构的完整描述,请参见手册页rusage。*

    我对我们应该记录的这个“用户”特别好奇,这是登录到机器的个人的实际登录名,还是我们在 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. 最后,什么是后台工作?
4

1 回答 1

1

(1) 您不需要命令列表。Shell 对所有外部命令执行基本相同的操作。请参阅exec系统调用系列。好的,内置的 shell 命令有点不同,但我在你的作业中没有看到任何内容。

(2) 是的,家庭作业列出了一堆系统调用和C 函数。您可能需要在某处使用所有这些。

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

(4) 我很快扫描了作业,并没有看到任何关于内置或后台进程的信息。除非你知道,否则现在不要担心,因为它们可能会成为未来任务的一部分。

老实说,如果你迷失了方向,而你的任务要在两天内完成,那么你的工作就真的完成了。

于 2013-09-26T00:45:36.370 回答