Nosauktais programmkanāls

Informātikā **nosauktais programmkanāls** (arī FIFO buferis), vai  ir Unix un uz Unix bāzētu sistēmu starpprocesu komunikācijas () metode, un ir modificēts tradicionālais programmkanāls. Šīs komunikāciju metodes variācija tiek pielietota arī Microsoft Windows sistēmās.
Tradicionālais (nenosauktais) programmkanāls tiek saukts šādi, jo tas eksistē tikai tik ilgi, kamēr pastāv to izveidojušais datorprocess. Nosauktais programmkanāls turpina pastāvēt arī pēc tam, kas to izveidojošais datorprocess ir beidzis savu darbību, un, lai no tā atbrīvotos, tas papildus ir jādzēš. Visbiežāk datorprocesi pieslēdzas nosauktajiem programmkanāliem, lai komunicētu savā starpā.

## Unix sistēmas

Nosauktais programmkanāls tiek izveidots ar sistēmas iebūvētajām funkcijām mkfifo() vai mknod(), un 2 procesi (viens kā rakstītājs, otrs kā lasītājs) var pieslēgties izveidotajam kanālam izmantojot tā vārdu.

1. piemērs - var tik izveidots kanāls, kura dati nonāk datu arhivācijas utilītā gzip, kas šādā gadījumā saspiež visu, kas tiek ierakstīts nosauktajā programmkanālā:

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


Pēc tam, atsevišķā procesu čaulā iespējams nosūtīt datus:
 cat file > my_pipe
Pēc lietošanas beigām, nosaukto programmkanālu iespējams dzēst kā jebkuru citu datni:
 rm my_pipe

2. piemērs – nosauktais programmkanāls var tikt izmantots, lai nosūtītu datus starp 2 procesiem neizmantojot pagaidu datni. Šeit gzip izvaddati tiek rakstīti kanālā:

```bash
mkfifo --mode=0666 /tmp/namedPipe
 gzip --stdout -d file.gz > /tmp/namedPipe
```

Tad dati tiek nolasīti, un, bez papildus datnēm, rakstīti MySQL tabulā:

```mysql
LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;
```

Bez nosauktā programmkanāla, lai veiktu šo operāciju būtu bijis nepieciešams atspiestos datus saglabāt papildus datnē, lai pēc tam to apstrādātu ar MySQL datubāzes utilītprogrammu. Papildus datnes rakstīšana nozīmētu papildus ievad/izvad- operācijas un mazāk brīvas vietas uz datora cietā diska.

Arī PostgreSQL datubāzes utilīta `psql` atbalsta datu ielādi no nosauktā programmkanāla.

## Windows sistēmas

Windows sistēmās nosaukto programmkanālu implementācija ir pieskaņota klienta-servera arhitektūrai, un darbojas līdzīgi kā TCP/IP ligzda. Windows sistēmu nosauktie programmkanāli atbalsta arī, visbiežāk serveru lietotnēs lietoto, *pasīvo* iestādījumu (salīdzinājumam Unix sistēmās - *Unix domain sockets*). Windows 95 operētajsistēma atbalstīja tikai nosauktā programmkanāla klienta pusi. Uz Windows NT bāzētās sistēmas atbalsta kā klienta, tā servera puses.

Ar nosaukto programmkanālu var strādāt tāpat kā ar datni, izmantojot Win32 SDK funkcijas CreateFile, ReadFile, WriteFile and CloseHandle, lai to atvērtu, lasītu, rakstītu un aizvērtu. Atšķirībā no Unix sistēmām, nosauktajiem programmkanāliem nav komandrindas atbalsta.

Atšķirībā no Unix sistēmām, nosaukto programmkanālu nav iespējams izveidot failu sistēmā, un tie nav pastāvīgi. T.i., kanāls tiek dzēsts ja tiek aizvērtas visas saites uz šo kanālu. Nosauktie programmkanāli tiek glabāti nosaukto programmkanālu failu sistēmas (NPFS) saknes katalogā, kas atrodas `\\.\pipe\` (sekojoši, kanāls "foo" tiktu saglabāts kā \\.\pipe\foo). Nenosauktie programmkanāli veidoti tāpat kā nosauktie, ar to atšķirību, ka tam tiek dots nejaušs vārds.

## Skatīt arī

* Programmkanāls

## Atsauces

## Ārējās saites
*The Linux Programmer's Guide: Named Pipes 
*Linux Journal: Introduction to Named Pipes 
*MSDN Library: Named Pipes