POSIX shell 实现

6 篇文章 0 订阅
含有后台运行功能,日后会不定期加入管道功能,历史记录功能 

#include <stdio.h>
#include <unistd.h>
#define MAX_LINE 80
void setup(char inputBuffer[], char *args[],int *background)
{
    int length, i, start, ct;     
    ct = 0;
    length = read(STDIN_FILENO, inputBuffer, MAX_LINE);  
 start = -1;
    if (length == 0)
        exit(0);            
    if (length < 0){
        perror("error reading the command");
 exit(-1);           
    }
 for (i=0;i<length;i++) 
 { 
        switch (inputBuffer[i])
  {
   case ' ':
   case '\t' :               
      if(start != -1)
      {
       args[ct] = &inputBuffer[start];    
       ct++;
      }
      inputBuffer[i] = '\0'; 
      start = -1;
      break;
   case '\n':                 
      if (start != -1)
      {
       args[ct] = &inputBuffer[start];     
       ct++;
      }
      inputBuffer[i] = '\0';
      args[ct] = NULL;
      break;
   default :             
      if (start == -1)
         start = i;
      if (inputBuffer[i] == '&')
      {
       *background  = 1;
       inputBuffer[i] = '\0';
      }
  } 
     }    
     args[ct] = NULL; /
}
int main(void)
{
 char inputBuffer[MAX_LINE]; 
    int background;             
    char *args[MAX_LINE/2+1];
    while (1)
 {           
  background = 0;
  printf("COMMAND->\n");
  setup(inputBuffer,args,&background);      
  pid_t pid;
  pid = fork();
  if (pid < 0)
  {
   fprintf(stderr, "Fork Failed");
   exit(-1);
  }
  else if (pid == 0)
  {
   execvp(args[0], args);
  }
  else
   if (background == 1)
    wait(NULL);
     }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值