c.Inchiderea pipe

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


La оnchiderea unui pipe, un proces urmeazг accea?i procedurг ca ?i la оnchiderea unui fi?ier regulat, exceptвnd faptul cг nucleul executг unele prelucrгri speciale оnainte de a elibera inodul pipe-ului. Astfel, el decrementeazг contorul corespunzгtor numгrului de procese ce scriu ?i respectiv, citesc din pipe. Dacг numгrul proceselor redactor (ce scriu оn pipe) este 0 ?i sunt procese cititor (ce citesc date din pipe) blocate, nucleul le treze?te, iar ele vor оncheia operaЮia de citire fгrг a citi date. Dacг numгrul proceselor cititor este 0 ?i sunt procese redactor blocate, nucleul le treze?te ?i le trimite un semnal ce indicг o condiЮie de eroare.
De?i оn cazul pipe-urilor numite care au doar un cititor/redactor blocat existг posibilitatea de a apare noi procese redactor sau cititor, nucleul le trateazг оn aceea?i manierг ca pe cele obi?nuite. Cвnd nici un proces cititor sau redactor nu mai acceseazг pipe-ul, nucleul elibereazг toate blocurile sale de date ?i actualizeazг inodul pentru a indica cг pipe-ul este gol. Cвnd elibereazг inodul unui pipe obi?nuit, el elibereazг ?i copia disc pentru a fi reasignatг.
--Exemplu
char string[ ]= "hello";
^main()
{
^ char buf[1024];
^ char *cp1, *cp2;
^ int fds[2];
^ cp1= string;
^ cp2= buf;
^ while (*cp1)
^ *cp2++= *cp1++;
^ pipe(fds);
^ for(;;)
{
^write(fds[1], buf, 6);
^read(fds[0], buf, 6);
^ }
^}