PIPES AMB NOMUna pipe és un fitxer especial (no com els que havíem manipulat fins ara: ordinaris, enllaços simbòlics o directoris) que té un funcionament FIFO (Firs In First Out) és a dir, com una cua, allò que primer s'hi escriu serà allò que primer es llegirà. Com qualsevol fitxer, s'omplen a mida que s'hi escriu. La novetat és que es buiden a mida que s'hi llegeix: S'utilitzen per a sincronitzar dos processos, un que hi escriurà
i l'altre que hi llegirà. Explicarem aquesta sincronització
més endevant. De moment, vegem com es creen aquests fitxers especials.
prw-rw-rw- 1 lvalenci profes 0 8 feb 11:15 novapipe La crida al sistema que ens servirà per a crear pipes funciona d'una manera similar:
Retorna 0 si tot va bé i -1 combinat amb errno si hi ha problemes. El segon paràmetre (permisos) s'expresa en octal (per exemple 666) pero queda modificat pel valor umask, de manera que amb un umask usual de 022, si posem 666 els permisos seran 666 & ¬022, és a dir 644. Vegem-ho amb un exemple simple: Com es pot veure, hem utilitzat la funció umask per assegurar-nos el valor de la màscara i que el resultat final, pel que fa a permisos, sigui 755. SINCRONITZACIÓ El sistema operatiu és l'encargat de proporcionar la sincronització ja que quan un procés obri (crida open) una pipe amb nom per a llegir o per a escriure, quedarà aturat, bloquejat, fins que un altre procés també l'obri per a l'operació contrària. Per il·lustrar això, crearem un programa que escrigui una frase que rep pel teclat en una pipe amb nom (pipe3.c) i un altre programa que el llegeixi i el mostri per pantalla (pipe4.c). El codi de pipe3.c serà: Mentre que el codi de pipe4.c pot ser: Per comprovar la sincronització, executeu mkfifo mevapipe al vostre directori bin i obriu un altre terminal. En un dels terminals executeu pipe3 i a l'altre pipe4 i observareu com aquest darrer queda bloquejat fins que a l'altre terminal escriviu la frase.
|
Autor: Lluís València López
Aquesta obra està subjecta a una Llicència
de Creative Commons.