2012-03-07 6 views
0

私はクラスCのシェルスクリプトを書いています。ファイルリダイレクトを除くすべてのコマンドを実行するプログラムがあります。誰かが私がファイルリダイレクトについてどうやって調べる必要があるかを理解するのに役立つかもしれませんが、私はforkが0を返すときにそれを行う必要があることを知っています。シェルファイルのリダイレクト

ご協力いただければ幸いです。

コード: ここに私のコードの更新版があります。ファイルをうまく作成しますが、後で何をすべきかわかりません。私は正しいファイル記述子を閉じて、ファイル記述子を最も低いオープン記述子に複製すると思います。 dupの後に正しいファイル記述子を閉じる以外に何をするのを手助けできますか?

引数[]私は(つまりLS -l、lsの-l>アウト)入力を保存する配列がある

if ((cpid = fork()) == 0) 
{ 
    for (i = 0; i < size; i++) 
    { 
    if (*args[i] == '<') 
    { 
     if ((fd = open(args[i+1], O_RDONLY)) == -1) 
     { 
     perror("open"); 
     exit(2); 
     } 
     else 
     { 
     close(0); 
     dup(fd); 
     close(fd); 
     } 
    } 
    if (*args[i] == '>') 
    { 
     if ((fd = open(args[i+1], O_WRONLY | O_CREAT, 0644)) == -1) 
     { 
     perror("open"); 
     exit(2); 
     } 
     else 
     { 
     close(1); 
     dup(fd); 
     close(fd); 
     } 
    } 
    } 

    execve(path,args,environ); 
    perror("execve"); 
    exit(2); 
} 
+1

habeチェックアウト://を/image/gif/paws/2647663/help-with-simple-linux-shell-implementation? –

+0

私は見ましたが、それを見つけられませんでした。リンクのおかげで、私はそれをチェックします。有望に見える! – Trance339

+0

私はその投稿を見て、自分のコードを更新しました。 – Trance339

答えて

0

あなたはHTTP見dup機能here

+1

サンプルを投稿するのはどうですか? – octopusgrabbus