父进程将数组中的整数按顺序写入管道。
...
close(thePipe[0]);
int array[]={1, 2, 5, 5, 5};
int j;
for(j=0; j<sizeof(array)/sizeof(int); j++){
write(thePipe[1], &(array[j]), sizeof(int));
}
close(thePipe[1];
...
它的子进程读取这些整数并总结它们。
...
close(thePipe[1]);
int sum = 0;
int buffer;
while( 0 != read(thePipe[0], &buffer, sizeof(buffer)) ){
sum = sum + buffer;
}
close(thePipe[0]);
...
孩子如何知道何时从管道中读取?
即使孩子获得了更多的CPU时间,在父母没有写入管道之前仍然无法读取。 这是如何运作的?
答案 0 :(得分:4)
操作系统负责这一点。从管道读取时,执行将阻塞,直到有可用数据。您的程序在等待时不会占用CPU时间。
答案 1 :(得分:4)
由于没有任何内容可以读取表单管道,子进程将等待(阻塞),直到父进程写入管道。