Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по FIFO 
:(
    Опции темы
vitaly1979
Дата 8.2.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.2.2006

Репутация: нет
Всего: 1



Кто нибудь знает можно ли одновременно писать некольким процессам в именованный канал FIFO?
И сколько может он вместить пока данные не прочитаны одним из процессов?
PM MAIL   Вверх
MAKCim
Дата 8.2.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(vitaly1979 @  8.2.2007,  20:37 Найти цитируемый пост)
Кто нибудь знает можно ли одновременно писать некольким процессам в именованный канал FIFO?

да, но O_NONBLOCK не должен быть установлен и объем записываемых данных не должен превышать PIPE_BUF байт
Цитата(vitaly1979 @  8.2.2007,  20:37 Найти цитируемый пост)
И сколько может он вместить пока данные не прочитаны одним из процессов? 

PIPE_BUF байт



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vitaly1979
Дата 9.2.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.2.2006

Репутация: нет
Всего: 1



MAKCim, подскажите, а чему приблизительно равно значение PIPE_BUF в Linux?
Вообще то я под UNix использую Perl, для моих задач хватает, а написал сюда вопрос потому что думаю в этом разделе найдется больше
знающих по FIFO.
И все же. 
Если я открываю в perl скрипте, указывая "+>" или "+<" я так понимаю O_NONBLOCK устанавливается, потому как нить не блокируется,
ожидая на другом конце кого-то.
Чем чревато O_NONBLOCK ?
Хотя я использую ioctl для чтения, и 1-й результат записи 2-х процессов в 1 FIFO дал положительный результат.
PM MAIL   Вверх
vitaly1979
Дата 9.2.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.2.2006

Репутация: нет
Всего: 1



1 вопрос снимается )
#define PIPE_BUF        4096    /* # bytes in atomic write to a pipe */

PM MAIL   Вверх
vitaly1979
Дата 9.2.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.2.2006

Репутация: нет
Всего: 1



Цитата

write(3) - Linux man page

Write requests of {PIPE_BUF} bytes or less shall not be interleaved with data from other processes doing writes on the same pipe. Writes of greater than {PIPE_BUF} bytes may have data interleaved, on arbitrary boundaries, with writes by other processes, whether or not the O_NONBLOCK flag of the file status flags is set.


Так чтож это за зверек такой PIPE_BUF
Определяет ли он максимальный размер канала?
В документации говорится что при записи менее чем  PIPE_BUF байт данные не смешаются из разных процессов.

Видимо нужно на практике проверить, чем ждать ответа на форуме  smile 
PM MAIL   Вверх
vitaly1979
Дата 9.2.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.2.2006

Репутация: нет
Всего: 1



Возможно полезны будут кому-либо результаты эксперемента моего, так уж и быть, опубликую smile 
Ось FC4 даёт записать в FIFO 64 кб данных, после чего операция записи(perl: print or syswrite) блокируется до появления читающего.

PM MAIL   Вверх
MAKCim
Дата 9.2.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(vitaly1979 @  9.2.2007,  15:35 Найти цитируемый пост)
В документации говорится что при записи менее чем  PIPE_BUF байт данные не смешаются из разных процессов.

да, запись из разных процессов в один канал атомарна, если порция записываемых данных не превышает PIPE_BUF байт
Цитата(vitaly1979 @  9.2.2007,  17:28 Найти цитируемый пост)
Ось FC4 даёт записать в FIFO 64 кб данных, после чего операция записи(perl: print or syswrite) блокируется до появления читающего.

вполне возможно, ты же сам привел цитату
Цитата

#define PIPE_BUF        4096    /* # bytes in atomic write to a pipe */




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.