STDOUTをファイルにリダイレクトできません。C子プロセスでexecによって呼び出されたプロセスのstdoutをファイルにリダイレクト
私には2つのプロセスがあります。これらは5秒間実行してから殺す必要があります。
プロセス1:は、そのSTDOUTをパイプにリダイレクトしてから、ランダムなnubersを出力します。
プロセス2:は、そのSTDINをパイプにリダイレクトし、そのSTDOUTをファイルにリダイレクトします。次に、execl()によってプロシージャappc1を呼び出します。このプロシージャは、STDOUTに出力します。
問題:ファイルout.txtには、リーダープロセスによって実行されたテストプリントが含まれていますが、appc1プロシージャのものはありません。リダイレクトをスキップしてコンソールに印刷すると、すべて正常に動作します。
プロセスを強制終了すると問題が発生する可能性がありますか?あまりにも早くファイルを閉じますか?アドバイスをありがとう、ありがとうございます。私はこれをかなりの間解決することができません。
ret = pipe(pipefd);
if (ret == -1) {
printf("Error creating pipe");
exit(1);
}
reader = fork();
if (reader == 0) {
dup2(pipefd[0], STDIN_FILENO);
file = fopen("out.txt", "w");
if(file == NULL) fputs("Could not open file",stderr);
dup2(fileno(file), STDOUT_FILENO);
fclose(file);
printf("Test values: %d %d\n\n", 234, 598);
execl("appc1","appc1", NULL);
}
else {
printf("PARENT: forking writer\n");
writer = fork();
if (writer == 0) {
sleep(1);
dup2(pipefd[1], STDOUT_FILENO);
while (1) {
num1 = rand() % 1000 + 1;
num2 = rand() % 1000 + 1;
printf("%d %d\n", num1, num2);
sleep(1);
}
}
else {
sleep(5);
kill(reader, SIGUSR1);
kill(writer, SIGUSR1);
wait(NULL);
exit(0);
}
}
これはコードです。
ありがとうございます。