next up previous contents
Next: Uwagi na temat jednokierunkowych Up: Jednokierunkowe potoki z Unixa Previous: Potoki - prosta metoda!   Contents

Atomowe operacje na potokach

Aby operacja mogła zostać uznana za 'atomową', musi spełnić jeden warunek - nic nie może jej przerwać. Standard POSIX ustala w /usr/include/posix1_lim.h, iż maxymalny rozmiar bufora dla operacji atomowej na potoku to:

           #define _POSIX_PIPE_BUF         512
   

Czyli do 512 bajtów może zostać zapisanych lub odczytanych atomowo z potoku. Jeżeli wartość ta zostanie przekroczona operacja zostanie podzielona i nie będzie atomowa. Pod Linuxem limit dla operacji atomowej został zdefiniowany w 'linux/limits.h' na:

           #define PIPE_BUF        4096
   

Jak widzisz Linux łagodzi wymagania POSIX, mogę dodać, iż całkiem rozsądnie. Atomowość operacji na potoku jest ważna gdy więcej niż jeden proces jest wykonywany ( FIFO ). Dla przykładu: jeżeli ograniczenie zostało przekroczone, a więcej niż jeden proces zapisują do potoku, dane zostaną przeplecione lub nadpisane (chunked). Innymi słowy, proces może zapisać dane do potoku, pomiędzy zapisami czynionymi przez inny.




2000-03-01


Poltronic