2012-02-28 16 views
2

私はUnixシェルをシミュレートする簡単なANSI Cプログラムを作っています。だから、fork()と内部の子プロセスを使って子プロセスを作成しています。与えられた(ユーザごとに)プログラムを実行するexec()を呼び出しています。ファイルからexec()への入力をリダイレクト

私がする必要があるのは、ファイルの内容をstdinにリダイレクトすることで、programというユーザーに送信することができます。私はこのような、そうしようとしています

Example: cat < file \\user wants run cat and redirect content of that file to it by typing this to my program prompt

...child process... 

int fd = open(path_to_file, O_RDONLY); 

int read_size = 0; 
while ((read_size = read(fd, buffer, BUF_SIZE)) != 0) { 
    write(STDIN_FILENO, buffer, read_size); 
} 
close(fd); 

execlp("cat", ...); 

すべてがうまく行く、ファイルの内容を標準入力に書き込まれますが、ファイル全体を読んだ後、猫はまだ(入力待ちI)は、その入力が終了し、猫を伝える必要がありますが、私はどのように:-(?

任意のアイデアを理解することはできません?ありがとうございました!!!

答えて

4

子proce内

dup2(fd, 0); 
execlp("cat", ...); 

catは、新たにリダイレクト記述子から読み取られますので、あなたは親にwhileループを必要としない:ssは、dup2(2)システムコールを経由して、前execlpを呼び出すには、あなたのopen」ED記述子への標準入力をリダイレクトそれだけで。

+0

素晴らしい!ありがとう、たくさんの男。私はこのコマンドを管理することもできますか? 'cat < file > out_file' dup2(...)関数を使用していますか? –

+1

はい、追加の 'dup2(fd_out、1)'が必要です。 –

+1

まだ 'execlp'の前に' close'を呼び出していますか? –

関連する問題