49 lines
2.5 KiB
C
49 lines
2.5 KiB
C
#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));
|
|
}
|
|
}
|