mailslots в Linux
Bodro 20 Августа, 2010 - 12:41
Добрый день!
Есть ли в Linux механизм, схожий с механизмом mailslots в Windows?
Если нет, то как обстоят дела с этим? Планируется ли создание в ядре Linux механизма на подобии механизма mailslots? И чем можно заменить подобный механизм, кроме как групповой или широковещательной рассылки TCP/IP?
»
- Для комментирования войдите или зарегистрируйтесь
Добрый день. Что такое
Добрый день. Что такое «механизм mailslots»?
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
http://en.wikipedia.org/wiki/
http://en.wikipedia.org/wiki/MailSlot
Сокеты же!
Не грусти, товарищ! Всё хорошо, beautiful good!
=3=
krigstask так хорошо начал, а winterheart всё испортил.
а эта строка - это просто подпись
Что такое mailslots
Нет, mailslots это не совсем сокеты. Точнее, это даже совсем не сокеты. Это отдельный механизм IPС в Windows. В википедии очень мало написано и очень сжато, поэтому вы сделали ложный вывод что это сокеты.
Это совсем не так!
Придётся объяснять. Сначала что такое mailslots ("Системное программирование в среде Windows", Джонсон М.Харт):
В этой же литературе написано:
В Linux (на счёт всех POSIX-совместимых или частично POSIX-совместимых систем говорить не буду, потому что достоверно не знаю) существует множество способов организации обмена данными между процессами. Это:
Возможно, есть ещё какие-то способы, о которых я, пока, не знаю.
В ОС Windows ко всему этому добавляется ещё и mailslots как отдельная технология, которая, тем не менее, использует стандартные функции чтения-записи: ReadFile, WriteFile.
Более подробно про mailslots можно прочитать в MSDN.
Так же вот что удалось найти в Интернете по этой теме в Windows:
Есть так же одна статья в которой говорится так:
Это, пожалуй, единственная статья где технология mailslots от MS пишется рядом с UNIX. Тут или ошибка, или технология mailslot в UNIX действительно существует.
Насколько я понимаю, mailslots это не придумка MS, это один из базовых механизмов передачи данных между процессами. Но точно утверждать не берусь, Дейкстар ли это придумал, либо кто-то из других учёных, либо всё же это собственная разработка MS.
Есть одна интересная статья на sourceforge: http://mailslots.sourceforge.net/mailslots.htm
Вот она то и вызывает смущение. Бегло пробежавшись по ней, я понял что люди предлагают ещё один механизм IPC для обмена данными между процессами в Linux, а именно mailslots.
Но в конце есть фраза:
Статья, судя по всему, писалась очень давно. Мне интересно, а какое положение дел в настоящий момент? Что-то ведётся в этом направлении?
Это был мой первый вопрос.
Теперь переформулирую свою задачу.
У меня есть в процессе отдельный специальный поток (thread), который периодически пишет данные в сокетпары. Есть множество других потоков (thread) или отфорканых процессов, которые читают данные из этих сокетпар.
Мне необходимо простым образом организовать групповую рассылку, чтобы я мог писать не в каждую сокетпару, используя список дескрипторов, а только в один какой-то канал. А другие могли читать этот канал.
В Windows подобную схему можно легко организовать с помощью mailslots. В unix-like ОС такое можно организовать, например, рассылкой мультикастовых сообщений и слушать в процессах пришедший мультикаст. Но это как-то неудобно. Может кто-то может предложить иной способ или что-то внятное посоветовать? Как лучше сделать такое?
как сделать ? - написать
как сделать ? - написать самому
skip...
на основе чего ? на основе очень стандартного для никсов механизма RPC - здесь кратко и на русском
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): как
Ну понятно дело. Я сам и пишу, только не mailslots, а свой механизм. Но было бы гораздо приятнее использовать готовый механизм ядра, наподобие mailslots.
Писать mailslots пока не хватает ни опыта ни времени (добавлять базовый IPC в ядро я имею ввиду). Мне проще на уровне приложения организовать такой обмен данными.
Статья очень интересная, только немного не то. Наверное, я опять не так выразился. Мне нужно не RPC и не обмен данными между разными операционными системами. У меня всё работает на одной железке под управлением одной ОС. Все задачи являются дочерними процессами от одного процесса или его потоками (fork, pthread). И мне нужно чтобы был один писатель и несколько читателей. Сейчас работает так:
я организовываю список и в этом списке есть в том числе и парные сокеты, через которые происходит обмен. Если мне необходимо передать строку "ПРИВЕТ" всем получателям, то я в цикле прохожу весь список и в каждую сокетпару кидаю это сообщение. Но это очень медленно и не совсем красиво. Использовать мультикаст, по-моему, тоже не лучший вариант. Вот, примерно, так. Есть какие-нить идеи?
А на счёт mailslots, я так понял, в UNIX такого механизма нет?
такого нет. Ибо не нужен как
такого нет. Ибо не нужен как я понимаю. Все юзают shm, давно и прочно - там и как бы проще , если все в пределах жизни одного процесса. В винде то маилслоты сетевые, тебе как я понял это не надо
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)