Canonada amb nom

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, una canonada amb nom (també coneguda com FIFO pel seu comportament) és una extensió del concepte de canalització tradicional en sistemes Unix i similars a Unix, i és un dels mètodes de comunicació entre processos (IPC). El concepte també es troba a OS/2 i Microsoft Windows, encara que la semàntica difereix substancialment. Una canonada tradicional és " sense nom " i només dura el temps que el procés. Tanmateix, una canonada amb nom pot durar mentre el sistema estigui en funcionament, més enllà de la vida útil del procés. Es pot suprimir si ja no s'utilitza. Normalment, una canonada amb nom apareix com a fitxer i, generalment, els processos s'hi adjunten per a IPC.[1]

En Unix[modifica]

En lloc d'una canalització de shell convencional, sense nom, una canalització amb nom fa ús del sistema de fitxers. Es crea explícitament utilitzant mkfifo()[2] o mknod(),[3] i dos processos separats poden accedir a la canalització pel nom — un procés pot obrir-lo com a lector i l'altre com a escriptor.[4]

Per exemple, es pot crear una canonada i configurar gzip per comprimir les coses que hi estan connectades:

mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &

En un intèrpret d'ordres de procés independent, es podrien enviar les dades per comprimir-les:

fitxer cat > my_pipe

A Windows[modifica]

Es pot accedir a una canonada amb nom com un fitxer. Les funcions de l'SDK del Win32 CreateFile, ReadFile, WriteFile i CloseHandle obren, llegeixen des, escriuen i tanquen una canonada, respectivament. A diferència d'Unix, no hi ha cap interfície de línia d'ordres, excepte PowerShell.

Les canonades amb nom no es poden crear com a fitxers dins d'un sistema de fitxers normal, a diferència d'Unix. També, a diferència dels seus homòlegs Unix, les canonades amb nom són volàtils (s'eliminen després que es tanqui l'última referència). Cada canonada es col·loca al directori arrel del sistema de fitxers de canonades amb nom (NPFS), muntat sota el camí especial \\. \pipe\ (és a dir, una canonada anomenada " foo " tindria un nom de camí complet de \\.\pipe\foo). Les canonades anònimes que s'utilitzen en la canalització són en realitat anomenades canonades amb un nom aleatori.

Referències[modifica]

  1. adegeo. «How to: Use Named Pipes for Network Interprocess Communication - .NET» (en anglès americà), 15-09-2021. [Consulta: 10 desembre 2023].
  2. «mkfifo, mkfifoat - make a FIFO special file» (en anglès). IEEE Std 1003.1-2017. The Open Group.
  3. «mknod, mknodat - make directory, special file, or regular file» (en anglès). IEEE Std 1003.1-2017. The Open Group.
  4. «Anonymous and Named Pipes in Linux» (en anglès). [Consulta: 10 desembre 2023].