问一个Open2的问题

Open2中打开C程序,然后往管道里写东西比如"xxxx\n",只要不关闭写端,C程序就会阻塞在read(fgets),貌似什么东西都沒读到
C程序如下
main()
{
      char buff[256]={0};
      while(1)
      {
           fgets(buff,256,stdin);
           printf("%s",buff);
       }
       return 0;
}

测试过BC可以每次读一行,不知道它是什么原理~~
谁能帮讲解下,QQQ