dev/c/ParallelsTest/77.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));
}
}