read irá bloquear até que os dados estejam disponíveis, e a gravação irá bloquear ou falhar caso o pipe esteja cheio. Existem alguns parâmetros como PIPE_BUF , PIPE_SIZE e O_NONBLOCK que desempenham um papel fundamental no pipe.
O valor de PIPE_BUF pode ser determinado via 'ulimit -a'. Está definido nos limites.h. O PIPE_BUF controla o tamanho garantido para gravação atômica . Isso ajuda a criar aplicativos multithread seguros.
O PIPE_SIZE depende do tamanho da página. No kernel 2.4, era equivalente ao tamanho de uma página (4KB). No entanto versões após 2.6 são mapeadas para uma matriz de 16 páginas (64 KB). Isso é definido no arquivo pipe_fs_i.h como PIPE_BUFFERS (16). Versões posteriores do kernel têm fcntl com F_SETPIPE_SZ permitindo aumento no tamanho da página.
O O_NONBLOCK permite executar gravações parciais e diferidas. No entanto, se O_NONBLOCK estiver habilitado, mas se o número de bytes a serem gravados no canal for maior que PIPE_BUF, a gravação falhará no caso se o campo estiver cheio, senão com base no valor de retorno da gravação, ele será intercalado com dados de outros processos .