Pull to refresh

Comments 34

UFO just landed and posted this here
А какая, примерно, скорость передачи получается?)
Ну у меня получилось за 4 секунды 800 КБайт, то есть 200 КБайт в секунду.
Прошу прощения. Не секунды, а минуты. 200КБайт в минуту!
--Теперь нужно рассмотреть случаи непредвиденной смерти родителя или ребёнка. Если умрет ребёнок, то всё --просто — родитель получит SIGCHLD.

--С ребёнком будет немного сложнее, нет гарантии что ребёнка как либо известят о смерти его родителя.

Мсье знает толк в маньячестве)
Нет, у меня-таки ощущение, что всю программу физтеха по информатике решили на хабр запостить.
Где тройной хендшейк? Никто ж не гарантирует, что другие процессы в системе не будут посылать эти сигналы.
Тсс, иначе скоро бывшие первокурсники завалят хабр эмуляторами PDP-11 :)
… Написаными на .cmd скриптах, да…
Интересно, как будет выглядеть хендшейк на азбуке Морзе… Может кто-нибудь реализует? )
Ну, предположим,
Сервер: Железисто, железисто, разделите-ка
Клиент: разделите-ка
Сервер: Попер данные
А процессы других пользователей и не могут посылать сигналы, у них на это нет прав.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Спасибо за замечание, подправил.
В древней книжке «секреты суперхакера» был похожий метод обмена информацией. Только там они создавали пустой файл/каталог в качестве флага.
Британские ученые снова в деле :-)
Порядок доставки обычных сигналов не гарантирован. Под линуксом последовательная доставка работает из-за особенностей реализации, но, насколько я знаю, её никто не гарантирует.

Для Real Time сигналов всё ещё хитрее — сначала доставляются сигналы с наименьшим номером, т.е. они самые срочные.

Чтобы сделать доставку надёжной и переносимой предлагаю осуществить двустороннюю передачу данных с «подтверждением» каждого сигнала :)
Так подтверждение вроде и так есть, но используется для гарантии что принимающий процесс не завершился.
И вправду, я недоглядел, извиняюсь. Но тут возникают потенциальные гонки :) глобальные переменные не atomic_t, лихой компилятор может сделать обращения к ним неатомарными.
Осталось реализовать передачу файлов на семафорах: взять 8 под «шину данных» и девятый для синхронизации!
Интересная идея, надо будет попробовать :)
Это надо в блог ИБ. Это же информационный поток между приложениями с разными приоритетами доступа.
Нет, процессу другого пользователя посылать сигнал нельзя.
Ходят слухи, что i/=2 работает медленее чем i=i>>1, да и в данном случае так логичней и понятней написать на мой взгляд.
Нормальный компилятор будет оптимизировать любую арифметику с константами и выберет (ок, должен выбрать) наиболее быстрый вариант.

Изо всех доступных мне компиляторов подобные вещи не делал ЕМНИП только компилятор Delphi.
[sarcasm]В сравнении со скоростью передачи сигналов это очень существенная оптимизация[/sarcasm]
В linuxе есть штатный способ: Можно через prctl(PR_SET_PDEATHSIG,sig_num); назначить сигнал который будет присылаться при завершении существования родительского процесса.
А разве не может возникнуть ситуации, когда prctl в ребёнке ещё не вызвалась, а родитель уже умер? Ведь тогда на момент вызова prctl у ребёнка будет уже новый родитель?
Может. Но даже если это так, то это тоже детектируется, условием (getppid()==1)
Sign up to leave a comment.

Articles