命令解释器在操作系统中的作用

时间:2015-10-02 19:50:05

标签: windows operating-system

我正在阅读有关操作系统的内容。我读到,当操作系统启动时,命令解释程序作为用户进程启动,当您单击GUI元素时,例如,应用程序的桌面符号,启动该应用程序的命令将传递给此命令解释程序。

我知道shell或cmd.exe形式的命令解释器。那么这是否意味着在Windows上双击桌面图标时,例如word,下面有一个命令解释器来处理这个命令?因此,单击GUI元素等于在cmd.exe中编写命令?

在Windows下,进程资源管理器中显示的该进程的名称是什么?

2 个答案:

答案 0 :(得分:2)

传统上,至少,“命令解释器”这个短语仅表示命令行解释器,例如cmd.exe,如果你用这种方式解释短语,则声明是错误的。当界面是图形界面时,例如在Windows中,我们通常将其称为“shell”。

Windows shell在任务管理器中称为资源管理器explorer.exe

  

因此,单击GUI元素等于在cmd.exe中编写命令?

它们是等效的,因为它们都提供广泛相同的功能(允许用户与操作系统连接)但不相同。

请注意,通过将命令传递给cmd.exe或反之亦然,Explorer无法正常工作。

答案 1 :(得分:0)

在linux中,Command解释器接受来自用户的命令然后将此命令提供给kernel.Command解释器在linux中也称为shell。在Linux中有不同的shell可用,如bash,korn等...我实现了简单c base shell如下图所示,

/*header*/
#include<stdio.h>
#include<string.h>
#include <signal.h>
#include<stdlib.h>

/*macros*/

/*maximum lenth of the line*/
#define LINE_MAX 10

/*function prototype*/
int getline1(char s[],int lim);

/*main*/
int main()
{
    char line[LINE_MAX];/*to store line*/
    int len;/*lenth of the input line*/

    /*clear the terminal*/
    system("clear");

    printf("************This is the C shell**********\n");
    printf("Enter ctrl+D to exit\n");

    /*calls the getline function to get input line*/
    while ((len = getline1(line, LINE_MAX)) > 0){

                /*if specified command is entered then execute it
         *else print command is not found 
         */
        if(!strcmp(line,"ls"))
            system("ls");

        else if(!strcmp(line,"pwd"))
            system("pwd");

        else if(!strcmp(line,"ifconfig"))
            system("ifconfig");

        else
            printf("Command is not found\n");
    }

    printf("Exiting from shell..\n");
    return(0);
}

/**
 * @brief getline1 gets the line from user
 * param [in] : s is string to store line
 * param [in] : lim is maximum lenth of the line
 *
 * @return 0 fail nonzero otherwise
 */
int getline1(char s[],int lim)
{
    /*c is to store the character and lenth is lenth of line*/
    int c, lenth;

    /*take the characters until EOF or new line is reached*/
    for (lenth = 0; lenth < lim-1 && (c=getchar()) != EOF && c!='\n' ; ++lenth)
            s[lenth] = c;

    /*count the new line character*/
    if(s[0] == '\n')
        lenth++;

    /*assign null at end*/
    s[lenth] = '\0';

    /*return lenth of the line*/
    return lenth;

}