0

bashのコマンドに単純なシェルを実装していc ます。

作業したい行を既に解析しました(入力を配列に保存しました)stdinchar**今、私は次のケースの世話をしています:

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

小さい、大きい、リダイレクト、バックグラウンドでのコマンドの実行、およびパイプ。

私がこれをしたいのであれば、私は何かを理解しようとしています:

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)新しいプロセス
  • 子では、あなたの前に、最初のステップで取得したファイル記述子にリダイレクトするexecvp(3)ために使用しますdup2STDOUT_FILENO

編集

編集された質問に照らして:

  • あなたのstrcpy主張はおそらく逆です
  • おそらく、wait(2)またはwaitpid(2)親ブランチ上で行う必要があります
于 2012-05-18T17:36:29.777 に答える