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;
}