Linuxでこのdup2コマンドを試しています。私は次のようにコードを書きました:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
int pipe1_ends[2];
int pipe2_ends[2];
char string[] = "this \n is \n not \n sorted";
char buffer[100];
pid_t pid;
pipe(pipe1_ends);
pipe(pipe2_ends);
pid = fork();
if(pid > 0) { /* parent */
close(pipe1_ends[0]);
close(pipe2_ends[1]);
write(pipe1_ends[1],string,strlen(string));
read(pipe2_ends[0], buffer, 100);
printf("%s",buffer);
return 0;
}
if(pid == 0) { /* child */
close(pipe1_ends[1]);
close(pipe2_ends[0]);
dup2(pipe1_ends[0], 0);
dup2(pipe2_ends[1],1);
char *args[2];
args[0] = "/usr/bin/sort";
args[1] = NULL;
execv("/usr/bin/sort",args);
}
return 0;
}
私は、このプログラムが次のように動作することを期待しています: 子をフォークし、そのイメージを並べ替えプロセスに置き換える必要があります。また、stdin と stdout は dup2 コマンドに置き換えられているため、sort がパイプから入力を読み取り、出力を親によって出力される他のパイプに書き込むことを期待しています。しかし、ソートプログラムは入力を読み取っていないようです。コマンドライン引数が指定されていない場合、ソートは標準入力からそれを読み取りますか? 誰かがこの問題を手伝ってくれませんか。
どうもありがとう!