Nosauktais programmkanāls

Vikipēdijas lapa
Pārlēkt uz: navigācija, meklēt

Informātikā nosauktais programmkanāls (arī FIFO buferis), vai angļu: named pipe ir Unix un uz Unix bāzētu sistēmu starpprocesu komunikācijas (angļu: inter-process communication – IPC) 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[labot šo sadaļu | labot pirmkodu]

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ā:

 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ā:

 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ā[1]:

 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.[2]

Windows sistēmas[labot šo sadaļu | labot pirmkodu]

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 aplikācijā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ī[labot šo sadaļu | labot pirmkodu]

Atsauces[labot šo sadaļu | labot pirmkodu]

Ārējas saites[labot šo sadaļu | labot pirmkodu]