【LINUX】Minishell two(添加重定向功能)

Minishell two(追加重定向功能)

Minishell two

思路讲解

当我们输入的命令用cmd来存储,然后通过循环来遍历cmd,通过找到> 或者>>来判断是重定向或者追加重定向,思路很简单接下来就是代码的实现。

代码实现

void redirect(char *cmd)
{
  int fd =-1;//先定义文件描述符
  int redirect_count=0;//计量到大于号的数量
  char *ptr = cmd;//通过ptr来指向cmd
  char *file=NULL;//定义重定向的文件名
  while(*ptr)//不为空进入循环
  {
    if(*ptr = '>')//重定向
    {
      *ptr++='\0';//找到大于号将其值0
      redirect_count++;//数量加1
      if(*ptr=='>')//追加重定向
      {
        *ptr++='\0';//找到第二个继续置0
        redirect_count++;//数量继续加加
      }
      while(*ptr!='\0' && isspace(*ptr))//如果空格就忽略让ptr++
      {
        *ptr++;
      }
      file=ptr;//到了第一个不为空格的值给file
      while(*ptr !='\0' && !isspace(*ptr))
      {
        *ptr++;
      }
      *ptr='\0';//检测到空格停止
      if(1 == redirect_count)//判断数量来选择重定向

      {
        fd=open(file,O_CREAT|O_TRUNC|O_WRONLY,0664);//创建并清空
      }
      else if(2 == redirect_count)//判断数量来选择追加重定向
      {
        fd=open(file,O_CREAT|O_WRONLY|O_APPEND,0664);//创建并追加
      }
      dup2(fd,1);//通过dup2函数来将输出到显示器(1)上的数据给到文件
      close(fd);//关闭文件
    }
    ptr++;//不为空++
  }
}

之后的代码在one中进行整合

链接: Minishell one.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值