Int main()

{

int fd[2] , result;
size_t size;

char resstring[14] ;

/* Попытаемся создать pipe */

if(pipe(fd) < 0){

/* Если создать pipe не удалось, печатаем об этом сообщение и прекращаем работу */

printf("Can\'t create pipe\n");

exit(-1) ;

}

/* Порождаем новый процесс */

result = fork();

if(result){

/* Если создать процесс не удалось, сообщаем об этом и завершаем работу */

printf ("Can\'t fork child\n");

exit (-1) ;

}

else if (result > 0) {

/* Мы находимся в родительском процессе, которыйбудет передавать информацию процессу-ребенку. В этом процессе выходной поток данных нам не понадобится, поэтому закрываем его.*/

close(fd[0]);

/* Пробуем записать в pipe 14 байт, т.е. всю строку "Hello, world!" вместе с признаком конца строки */

size = write(fd[l], "Hello, world!", 14);

if(size != 14) {

/* Если записалось меньшее количество байт, сообщаем об ошибке и завершаем работу */

printf("Can\'t write all string\n");

exit(-1);

}

/* Закрываем входной поток данных, на этом родитель прекращает работу */

close(fd[1]);

printf("Parent exit\n");

}

else {

/* Мы находимся в порожденном процессе, который будет получать информацию от процесса-родителя. Он унаследовал от родителя таблицу открытых файлов и, зная файловые дескрипторы, соответствующие pip'у, может его использовать. В этом процессе входной поток данных нам не понадобится, поэтому закрываем его.*/

close(fd[l]);

/* Пробуем прочитать из pip'a 14 байт в массив, т.е. всю записанную строку */

size = read(fd[0] , resstring, 14) ;

if(size < 0) {

/* Если прочитать не смогли, сообщаем об ошибке и завершаем работу */

printf("Can\'t read string\n"};

exit(-1); }

/* Печатаем прочитанную строку */

printf("%s\n",resstring);

/* Закрываем входной поток и завершаем работу */

close(fd[0]);

}

return 0;

}