2011-01-20 4 views
7

Если несколько потоков записывают данные фиксированной длины (скажем, 4 байтовый адрес) в один канал, и есть один считыватель этого канала, гарантировано ли, что читатель получит байты по порядку? Другими словами, это write() атомной трубе?unix pipe несколько авторов

ответ

5

http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html

Атомный/неатомическое: записываемый атомная , если вся сумма написана в одной операции не чередуется с данными из любого другого процесса. Это полезно , когда есть несколько авторов , отправляющих данные одному читателю. Применения должны знать, насколько велика написание запроса выполняется атомарно. Этот максимум называется {PIPE_BUF}. Этот объем IEEE Std 1003.1-2001 не говорит ли запросы на запись для более {PIPE_BUF} байт атомарные, но требует, чтобы записи о {PIPE_BUF} или меньших количество байт должны быть атомарными.

+0

Спасибо. Я видел страницу man http://linux.die.net/man/2/write и ничего не видел. – Manish

+0

Обратите внимание, что значение 'PIPE_BUF' значительно варьируется между Unix-системами. См. Здесь для сравнения наблюдаемых значений: http://ar.to/notes/posix#pipe-buf –

Смежные вопросы