a.Comunicare intre proc prin.pipe,dup

Сделай свою wap-шпаргалку =) попробуй конструктор сайтов http://www.panweb.com/


#include <string.h>
^char string[]=" hello word";
^ main ()
^ {
^ int count,i;
^ int to_par[2], to_chil[2]; /* pentru pipe-urile pгrintelui ?i fiului */
^ char buff[256];
^ pipe(to_par);
^ pipe(to_chil);
^ if(fork() ==0)
{
/* procesul fiu se executг aici */
^close(0);/* оnchide vechea intrare standard */
^dup(to_chil[0]);/* duplicг descriptorul de citire al pipe-lui la /* intrarea standard */
^close(1);/* оnchide vechea intrare standard */
^dup(to_par[1]); /* duplicг descriptorul de scriere al pipe la ie?irea standard */
^close(to_par[1]); /* оnchide descriptorii pipe-lui nefolosiюi */
^close(to_chil[0]);
^close(to_par 0]);
^close(to_chil[1]);
^for(;;)
{
^if (count=read(0, buf, sizeof(buf)))==0)
^exit ();
^write(1, buf, count);
}
^ } /* procesul pгrinte se executг aici */
close(1);/* rearanjeazг intrгrile ?i ie?irile standard */ ^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));
}
^ }
Programul mo?tene?te descriptorii de fi?iere 0 ?i 1 (intrarea ?i ie?irea standard) de la pгrintele sгu. Execuюia fiecгrui apel sistem pipe alocг оn plus 2 descriptori de fi?iere оn ?irurile to_par ?i to_child. Procesul executг fork ?i face o copie a contextului sгu. Procesul pгrinte оnchide fi?ierul sгu standard de ie?ire (descriptorul de fi?ier 1) ?i duplicг (dup) descriptorul de scriere оntors de pipe pentru to_child. Deoarece primul slot liber din UFDT-ul pгrintelui este chiar acela eliberat prin apelul sistem close, nucleul copiazг descriptorul de scriere rezultat оn urma executгrii apelului sistem pipe оn slotul 1 al UFDT-lui ?i astfel descriptorul fi?ierului standard de ie?ire devine descriptorul de scriere al pipe-lui pentru to_child.