#include <stdlib.h>
#include <string.h>                                        
char string[] = "hello world";                             
main()                                                     
{                                                          
int count,i;                                            
int to_par[2],to_chil[2];    /* для каналов родителя и  
								потомка */              
char buf[256];                                          
pipe(to_par);                                           
pipe(to_chil);                                          
if (fork() == 0)                                        
{                                                       
   /* выполнение порожденного процесса */               
   close(0); /* закрытие прежнего стандартного ввода */ 
   dup(to_chil[0]); /* дублирование дескриптора чтения  
					   из канала в позицию стандартного 
					   ввода */                         
   close(1); /* закрытие прежнего стандартного вывода */
   dup(to_par[0]);  /* дублирование дескриптора записи  
					   в канал в позицию стандартного   
					   вывода */                        
   close(to_par[1]); /* закрытие ненужных дескрипторов  
   close(to_chil[0]);   канала */                       
   close(to_par[0]);                                    
   close(to_chil[1]);                                   
   for (;;)                                             
   {                                                    
	  if ((count = read(0,buf,sizeof(buf))) == 0)       
		 exit(0);                                        
	  write(1,buf,count);                               
   }                                                    
}                                                       
/* выполнение родительского процесса */                 
close(1);  /* перенастройка стандартного ввода-вывода */
dup(to_chil[1]);                                        
close(0);                                               
dup(to_par[0]);                                         
close(to_chil[1]);                                      
close(to_par[0]);                                       
close(to_chil[0]);                                      
close(to_par[1]);                                       
for (i = 0; i < 15; i++)                                
{                                                       
   write(1,string,strlen(string));                      
   read(0,buf,sizeof(buf));                             
}                                                       
}
