设为首页 加入收藏

TOP

c语言简易实现linux终端(一)
2014-03-10 13:04:06 来源: 作者: 【 】 浏览:162
Tags:语言 简易 实现 linux 终端

  c语言简易实现linux终端,代码:

  <PRE class=brush:java;></PRE><PRE class=brush:java;>Linux系统的命令分为内部命令和外部命令两种,内部命令由Shell程序实现,如cd、echo等,Linux的内部命令数量有限,而且绝大部分都很少用到。而每一个Linux外部命令都是一个单独的应用程序,我们非常熟悉的ls、cp等绝大多数命令都是外部命令,这些命令都以可执行文件的形式存在,绝大部分放在目录/bin和/sbin中。这样一来,我们编程的难度就可以大大下降了,我们只需要实现很有限的内部命令,对于其它的输入,统统当作应用程序来执行即可。

  </PRE><PRE class=brush:java;></PRE><PRE class=brush:java;><STRONG>//MyShell.c</STRONG></PRE><PRE class=brush:java;>#include <STDIO.H>

  #include <STRINGS.H>

  #include <UNISTD.H>

  #include <STDLIB.H>

  #include <FCNTL.H>

  #define MAXSIZE 100

  void info_print();

  int main(int argc, char const *argv[])

  {

  /* code */

  while(1){

  char command[MAXSIZE];

  pid_t pid;

  int status;

  info_print();

  bzero(command,MAXSIZE);

  gets(command);

  if(-1==(pid=fork())){

  perror(fork);

  exit(-1);

  }

  if(pid>0){

  wait(&status);

  }else{

  int i,flag=0,j=0;

  char *file,*argv ;

  file=command;

  argv[flag++]=command;

  for(i=0;command[i]!='';i++){

  while(command[i]==' '){

  command[i++]='';

  j=1;

  }

  if(1==j){

  argv[flag++]=command+i;

  j=0;

  }

  }

  argv[flag]=NULL;

  if(0==strncmp(file,cd,2)){

  //printf(OK%s

  ,argv );

  if(-1==chdir(argv )){

  perror(chdir);

  exit(-1);

  }

  }else{

  if(-1==execvp(file,argv)){

  //perror(execvp);

  fprintf(stderr,%s: command not found

  ,file);

  }

  }

  }

  }

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇USACO 2009 Feb .. 下一篇常用数据结构之Trie树

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: