これをgdbで実行すると、親がwaitpidでハングしてしまい、その理由がわかりません。親はargvから引数をとり、パイプ経由で子に送信することになっています。それから、親は子からの引数の合計を返すことになっています。なぜこれをやっているのか分かりません。親プロセスはwaitpidを呼び出した後にハングします
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/poll.h>
static int myPipe[2];
int main(int argc, char **argv)
{
pid_t pid;
int value;
int status;
// set up pipe
if(pipe(myPipe))
{
printf("pipe error\n");
return -1;
}
// call fork()
printf("CS201 - Assignment 3 Premium - I. Forgot\n");
pid = fork();
if (pid == 0) {
// -- running in child process --
int sum = 0;
close(myPipe[1]);
for(int i = argc; i > 1; i--)
{
read(myPipe[0], &value, sizeof(value));
sum += value;
}
// Return sum of numbers.
return sum;
}
else {
// -- running in parent process --
int sum = 0;
close(myPipe[0]);
for(int i = argc; i > 1; i--)
{
value = atoi(argv[i-1]);
write(myPipe[0], &value, sizeof(value));
}
waitpid(pid, &status, 0);
sum = status;
printf("sum = %d\n", sum);
return 0;
}