0

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

我已经解析了我想要使用的行(我将输入存储stdin 到一个char**数组中)。现在我要处理以下情况:

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

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

如果我想这样做,我试图理解一些事情:

someApplication > file 

或者

someApplication < file 

或者

someApplication >> file 

对实施这些案例有什么好处吗forking?(含义,使用father&son过程)

我看到它的方式,只有当我有一个管道,比如 <code>ls|grep great</code> 时,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
            ?? 


    }


}
4

1 回答 1

4

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

既然这已经不碍事了,我建议你为这个command > file案子做以下事情:

  • 获取文件的文件描述符,使用open(2)
  • fork(2)一个新的过程
  • 在child,在你之前execvp(3),使用dup2重定向STDOUT_FILENO到第一步得到的文件描述符

编辑

根据编辑的问题:

  • 你的strcpy论点可能被颠倒了
  • 您可能需要wait(2)waitpid(2)在父分支上
于 2012-05-18T17:36:29.777 回答