⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell.c

📁 liunx下的shell实现;进程、线程同步的实现;I/O系统调用的比较(mmap)——操作系统的课程设计
💻 C
字号:
 #include<unistd.h>#include<stdlib.h>#include<sys/wait.h>#include<stdio.h>#include<string.h>#define P_ID 1void parse (char *cmdname, char *cmdargv[], char *cmdline);void execute (char *fiename, char *argv[]);void cd (char *cmdargv[]);void environ (char *cmdargv[]);void echo (char *cmdargv[]);void help ();void jobs (char *cmdargv[]);void quit ();intmain (int argc,char *argv[]){	char cmdname[256] = "";	char *cmdargv[256]={""};	char cmdline[256] = "";	printf ("welcome to use lshell.\n");	while (1)	{	  printf ("%s@%s:%s$ ",getlogin(),"lshell",get_current_dir_name());	  gets (cmdline);	  parse (cmdname, cmdargv, cmdline);	  if (!strcmp (cmdname, "environ"))	    environ (cmdargv);	  else if (!strcmp (cmdname, "cd"))	    chdir(cmdargv[1]);	  else if (!strcmp (cmdname, "echo"))	    echo (cmdargv);	  else if (!strcmp (cmdname, "help"))	    help ();	  else if (!strcmp (cmdname, "jobs"))	    jobs (cmdargv);	  else if (!strcmp (cmdname, "quit"))	    quit ();	  else if (!strcmp (cmdname, "exit"))	    quit ();	  else if (!strcmp (cmdname, "bye"))	    quit ();	  else	    execute(cmdname,cmdargv);	  	}}voidcd (char *cmdargv[]){  execute ("cd", cmdargv);}voidenviron (char *cmdargv[]){  execute ("env", cmdargv);}voidecho (char *cmdargv[]){  execute ("echo", cmdargv);}voidhelp (){printf("\n\t\t********** shell帮助手册**********\n"); printf("\n\t\t一、本shell支持以下内部命令:\n"); printf("\t\t(1)cd 目录名,更改当前的工作目录到指定的目录\n"); printf("\t\t(2)environ,列出所有环境变量字符串的设置,也可使用外部命令env\n"); printf("\t\t(3)echo 内容,显示echo后的内容且换行\n"); printf("\t\t(4)help,显示本帮助手册内容\n"); printf("\t\t(5)jobs,输出当前正在运行的进程,相当于外部命令ps\n"); printf("\t\t(6)quit,exit,bye,退出shell\n"); printf("\t\t二、外部命令直接输入即可运行,支持多参数\n"); printf("\n\t\t*********************************************\n\n");}voidjobs (char *cmdargv[]){  execute ("ps",cmdargv);}voidquit (){  printf ("quit lshell.\n");  exit (0);}voidparse (char *cmdname, char *cmdargv[], char *cmdline){  char *d = " ";  char *p;  int i = 0;  cmdargv[0]= strtok (cmdline, d);  strcpy (cmdname, cmdargv[0]);  while ((p = strtok (NULL, d)))    {      i++;      cmdargv[i]= p;    }  cmdargv[++i]=NULL;}voidexecute (char *filename, char *argv[]){  pid_t pid;  if ((pid = fork ()) < 0)    {      printf ("fork error\n");      exit (EXIT_FAILURE);    }  else if (pid == 0)    {      if (execvp (filename,argv))	printf ("-lshell: %s: command not found\n",filename);      exit (EXIT_FAILURE);    }  waitpid (pid, 0, 0);  return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -