/* Программа, иллюстрирующая работу с pip'ом в рамках одного процесса */


#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(){

int fd[2];
size_t size;
char string[] = "Hello, world!";
char resstring[14];

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

if(pipe(fd) < 0){

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

printf("Can\'t create pipe\n");
exit(-1);
}

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

size = write(fd[1], string, 14);

if(size != 14){

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

printf("Can\'t write all string\n");
exit(-1);
}

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

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

if(size < 0){

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

printf("Can\'t read string\n");
exit(-1);
}

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

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

/* Закрываем входной поток*/

if(close(fd[0]) < 0){
printf("Can\'t close input stream\n");
}

/* Закрываем выходной поток*/

if(close(fd[1]) < 0){
printf("Can\'t close output stream\n");
}

return 0;
}