1
我的任务是传递在命令行中输入的整数,并将它们通过从父母到孩子的管道传递,整数可以加在一起并通过收获返回给父母。我所有的整数变成在孩子4号,以及总和收获价值总是返回为数字1从父母到孩子传递整数的错误输出
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
static int toChild[2];
static int toParent[2];
static int input;
static int output;
int main(int argc, char **argv)
{
pid_t pid;
int status;
int nInts = argc;
// set up pipe
pipe(toChild);
pipe(toParent);
// call fork()
pid = fork();
if (pid == 0) {
close(toChild[1]);
close(toParent[0]);
// -- running in child process --
int sum = 0;
// Receive characters from parent process via pipe
// one at a time, and count them.
// Return sum of numbers.
for (int i=1; i < nInts; i++) {
output = read(toChild[0], &input, sizeof(input));
sum += output;
}
return sum;
close(toChild[0]);
close(toParent[1]);
}
else {
close(toChild[0]);
close(toParent[1]);
// -- running in parent process --
// Send numbers (datatype: int, 4 bytes) from command line arguments
// starting with argv[1] one at a time through pipe to child process.
for (int i=1; i < nInts; i++) {
input = atoi(argv[i]);
write(toChild[1], &input, sizeof(input));
}
waitpid(pid, &status, 0);
if(WIFEXITED(status)){
// Wait for child process to return. Reap child process.
// Receive sum of numbers via the value returned when
// the child process is reaped.
printf("sum = %d\n", WIFEXITED(status));
}
close(toParent[0]);
close(toChild[1]);
return 0;
}
}
你为什么在返回后调用'close'? –
我很担心它是否会在太早关闭通讯之前。 –
我的意思是那些'close'永远不会被调用,不是吗? –