zoukankan      html  css  js  c++  java
  • unix shell(壳)的简单实现

    用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务。但使用 API 需要手动编写程序。对于不编程序、且需要与操作系统进行交互的用户,又如何使用操作系统的服务呢?

    为了向那些不编程的用户提供服务,操作系统提供了一个壳(shell)来与用户交互。 每个操作系统都会提供某种壳以便与用户进行交互。正如蛋壳(eggshell)之于内部的蛋清(egg white)和蛋黄(egg yolk),操作系统提供的壳(“os shell”)是覆盖在操作系统服务上面的一个用户界面(user interface),一般分为如下两种形式:

    • 既可以是图形方式的(GUI, Graphical User Interface):Windows
      • windows 中,启动壳需要执行 explore.exe,也即 windows 的资源管理器
    • 也可以是文本形式的:UNIX,Linux;
      • 启动一个壳,只需要运行 shell 即可,可以同时启动多个壳;

    用户在这个界面上输入命令,操作系统则执行这些命令。当然,用户输入的命令不是直接的操作系统服务,而是所谓的 utilities(工具)。这里 utilities 的功能相当于 C 语言中的库函数。用户无法直接调用系统调用。壳上的用户不能直接使用操作系统提供的服务。

    1. 一个壳的具体功能

    • 显示提示符(prompt)
    • 接受用户命令并执行;
    • 启动后台进程;
    • 进行工作控制;
    • 提供薇伪终端服务;

    2. 一个简单的壳实现

    while (true) {
        type_prompt();                           // 显示命令提示符;
        read_command(command, parameters);       // 获取用户输入的命令,及参数
        if (fork() == 0) {                       // fork 一个子进程;
            execute(command, parameters, 0);     // 子进程代码,执行用户命令
        } else {                                 // 父进程代码段
            waitpid(-1, &status, 0);             // 等待子进程结束;
        }
    }
  • 相关阅读:
    安卓学习第一课——电话拨号器
    CodeForces 644B【模拟】
    hdu5861【线段树】
    CodeForces 41A+43A【课上无聊刷水题系列】
    hdoj5493【树状数组+二分】
    HDU5894【组合数学】
    Codeforces643A【一种暴力】
    CodeForces 689C【二分】
    CodeForces 665B 【水-暴力】
    CodeForces 653A【水】
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9422055.html
Copyright © 2011-2022 走看看