Здравствуйте. Возможно ли повреждение данных, если в один пайп записывают несколько потоков одновременно? Или нужно обязательно мьютекс? Как я понимаю запись одного байта более менее атомарно, а строки в символов 30 ?
Это пайп между несколькими тредами (для них он стдаут) и отдельным тредом, который делает на нем poll() и уже сам разбирается с данными. В этом случае все равно желательно? А на счет посылки одного char я был прав, что в этом случае мьютексы не нужны ?
> Ок, в /usr/src/linux/include/linux/limits.h нашел, 4096 байтов мне хватит за глаза, спасибо !
Рассчитывать именно на 4096 байт непортабельно.
POSIX требует, чтобы PIPE_BUF был не менее 512 байт но не требует
ничего более. Это значение может отличаться от системы к системе,
даже (IMHO) между Linux'ами.
Более того, проверка во время компиляции макроса PIPE_BUF тебе ничего
не даст - на машине, где программа будет работать, значение PIPE_BUF
может быть совсем другое (а ты его уже вкомпилировал).
Так что AFAIK самый корректный метод - определение этого параметра
_во_время_выполнения_ при помощи pathconf(), опция _PC_PIPE_BUF.
(man 3 pathconf).