2008年10月30日 星期四

FIFO對read和write的影響

FIFO預設是一個擱置性(blocking)
如果read遇到擱置性(blocking)FIFO就會等到write提供資料時,才會unblock.
而write遇到擱置性(blocking)FIFO會等到資料可以寫入為止.

在管線中系統會分配一塊buffer而這個buffer的大小定義在limits.h中的 PIPE_BUF
在linux或其他unix系統上,通常是4096位元組.

若是等於或小於PIPE_BUF位元組的資料要寫入FIFO,而FIFO開啟為O_WRONLY的擱置性模式,
就會寫入全部資料或是完全都不寫.

如果確定寫入的是一個擱置性的FIFO,而且寫入量小於PIPE_BUF位元組,
LINUX系統保證資料不 會被穿插也就是這個動作是atomic的.