首页 > 代码库 > 进程和程序:编写命令解释器sh(一)
进程和程序:编写命令解释器sh(一)
shell是一个管理进程和运行程序的程序,所有常用的shell有三个主要功能。
(1)运行程序
grep、date、ls、echo和mail都是一些普通程序,用C编写,并被编译成机器语言。shell将它们载入内存并运行它们。很多人把shell看作一个程序启动器。
(2)管理输入和输出
使用<、>和|符号可以将输入输出重定向。这样就可以告诉shell将进程的输入和输出连接到一个文件或是其他的进程。
(3)编程
shell同时也是带有变量和流程控制的编程语言。
一个shell的主循环主要执行下面的4步
(1)用户键入a.out;
(2)shell建立一个新的进程来运行这个程序;
(3)shell将程序从磁盘载入;
(4)程序在它的进程中运行直到结束。
1 #include <stdio.h> 2 #include <signal.h> 3 #include <string.h> 4 #include <stdlib.h> 5 6 #define MAXARGS 20 7 #define ARGLEN 100 8 9 int main()10 {11 char *arglist[MAXARGS+1];12 int numargs;13 char argbuf[ARGLEN];14 char *makestring();15 numargs = 0;16 17 while (numargs < MAXARGS)18 {19 printf("Arg[%d]? ", numargs);20 if (fgets(argbuf, ARGLEN, stdin) && *argbuf != ‘\n‘)21 arglist[numargs++] = makestring(argbuf);22 else23 {24 if (numargs > 0)25 {26 arglist[numargs] = NULL;27 execute(arglist);28 numargs = 0;29 }30 }31 }32 return 0;33 }34 35 int execute(char *arglist[])36 {37 execvp(arglist[0], arglist);38 perror("execvp failed");39 exit(1);40 }41 42 char *makestring(char *buf)43 {44 char *cp;45 buf[strlen(buf)-1] = ‘\0‘;46 cp = malloc(strlen(buf)+1);47 if (cp == NULL)48 {49 fprintf(stderr, "no memory\n");50 exit(1);51 }52 strcpy(cp, buf);53 return cp;54 }
进程和程序:编写命令解释器sh(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。