#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void)
{
int fd[2];
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
// Очищаем буфер перед использованием
memset(readbuffer, 0, sizeof(readbuffer));
if (pipe(fd) == -1) {
perror("pipe");
exit(1);
}
if ((childpid = fork()) == -1) {
perror("fork");
exit(1);
}
if (childpid == 0) {
/* ПОТОМОК: теперь ЧИТАЕТ из канала */
close(fd[1]); // Закрываем ненужный конец на запись
read(fd[0], readbuffer, sizeof(readbuffer) - 1);
printf("Потомок получил строку: %s", readbuffer);
close(fd[0]); // Закрываем конец на чтение
exit(0);
} else {
/* РОДИТЕЛЬ: теперь ПИШЕТ в канал */
close(fd[0]); // Закрываем ненужный конец на чтение
write(fd[1], string, strlen(string));
close(fd[1]); // Сигнал EOF для потомка
wait(NULL); // Ждем, пока потомок закончит работу
}
return 0;
}