在c中实现bash,每行包含{>,<,>> ,& ,| }

时间:2012-05-18 17:30:29

标签: c bash fork pipe

我正在为bash中的c命令实现一个简单的shell。

我已经解析了我想要使用的行(我存储了来自stdin的输入 进入char**数组)。现在我离开时要注意以下情况:

{ >, <, >> , & , | } 

小于,大于重定向,在后台和管道中运行命令。

我想了解一些事情,如果我想这样做:

someApplication > file 

someApplication < file 

someApplication >> file 

为了实施这些案件,forking会有什么好处吗? (意思是father&amp; son进程的使用)

我看到它的方式,只有当我有一个管道,如ls|grep great‬‬,然后fork才会更有效率,因为一个进程会在目录中显示文件,而另一个进程一个人会使用儿子的输入来完成管道的右侧。

谢谢。

编辑:

void handleLessThan(char** arguments , int * argumentsCount)
{
    int fd_fork = fork();
    int fd_sourceFile;
    char sourceFile[30];

    if (fd_fork == 0)  // son is running now
    {
        strcpy(arguments[*argumentsCount],sourceFile);
        fd_sourceFile= open(sourceFile, O_RDONLY);
        dup2(fd_sourceFile, 0); .
        execvp(arguments[0],arguments[1]);
    }

    else
    {
        // parent
            ?? 


    }


}

1 个答案:

答案 0 :(得分:4)

在Unix中创建流程的唯一标准方法是fork

现在已经不在了,我建议您为command > file案例做点什么:

  • 使用open(2)
  • 获取文件的文件描述符
  • fork(2)新流程
  • 在孩子中execvp(3)之前,使用dup2STDOUT_FILENO重定向到第一步获得的文件描述符

修改

根据编辑问题:

  • 您的strcpy参数可能已被撤消
  • 您可能需要在父分支上wait(2)waitpid(2)