进程如何知道何时从管道读取

时间:2015-04-06 20:01:15

标签: c pipe

父进程将数组中的整数按顺序写入管道。

...
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时间,在父母没有写入管道之前仍然无法读取。 这是如何运作的?

2 个答案:

答案 0 :(得分:4)

操作系统负责这一点。从管道读取时,执行将阻塞,直到有可用数据。您的程序在等待时不会占用CPU时间。

答案 1 :(得分:4)

由于没有任何内容可以读取表单管道,子进程将等待(阻塞),直到父进程写入管道。