私はこのコードを持っています:
close(pipefd[0]);
fp = fopen(argv[1], "r");
if(fp)
{
while((c = getc(fp)) != EOF)
{
if((write(pipefd[1], c, 1)) < 1)
{
fprintf(stderr, "Write to pipe failed.\n");
exit(EXIT_FAILURE);
}
}
}
fclose(fp);
close(pipefd[1]);
waitpid(childPID, &status, 0);
exit(EXIT_SUCCESS);
私の理解では、ファイルを開いてその内容をパイプに書き込む必要があります。これが別のプログラムの標準になります。私のテストでは、書き込み以外はすべて機能していることが示されていますが、なぜ機能しないのかわかりません。
私はただ愚かなことをしているのですか?
編集:はい、私は愚かなことをしていました。
問題は書き込みにあると思いましたが(cを&cにする必要があることを修正した後)、実際には子プロセスにあり、dup2()を使用してパイプの読み取り端を子プロセスのstdinにリンクしていました。私は後ろ向きに議論をしました。fork()以降の動作コードは次のとおりです。
childPID = fork();
if (childPID == 0)
{
//child code
//printf("In the child process.\n");
dup2(pipefd[0], STDIN_FILENO);
close(pipefd[1]);
execv(argv[2], paramList);
printf("You shouldn't be seeing this.\n");
}
else
{
//parent code
//printf("In the parent process\n");
close(pipefd[0]);
fp = fopen(argv[1], "r");
if(fp)
{
while((c = getc(fp)) != EOF)
{
if((write(pipefd[1], &c, 1)) < 1)
{
fprintf(stderr, "Write to pipe failed.\n");
perror("write");
exit(EXIT_FAILURE);
}
}
}
fclose(fp);
close(pipefd[1]);
waitpid(childPID, &status, 0);
exit(EXIT_SUCCESS);
}
うまくいけば、これは他の誰かが4日間机に頭をぶつける必要がないのに役立ちます!そして、お答えする時間のある皆様、ありがとうございました。