LINUX.ORG.RU
ФорумTalks

Зачем нужны сокеты и ioctl, когда есть псевдофайлы?

 , , , ,


0

1

В UNIX ввели костыль в виде отдельный сискол вместо псевдофайлов когда имплементировали сокеты. Потом вообще ioctl запилили. Зачем это всё? Почему нельзя было использовать псевдофайлы для настройки устройств и доступа к ним? Зачем нарушать файловое API? Тот же plan9 и с псевдофайлами прекрасно работает.

Перемещено tailgunner из development

Ответ на: комментарий от no-dashi

d=open(«/dev/net/tcp/listening/0.0.0.0:80)

push(d,«/proto/ssh»,...);

push(d,myProto)

эдак вы streams переизобретаете..

MKuznetsov ★★★★★
()

надо же было с чего-то начинать :)

и кмк, бинарное апи быстрее этих извратов файлами. возможно для некоторых случаев это критично.

Rost ★★★★★
()
Ответ на: комментарий от Rost

Нет, не быстрее. Быстрее то что оптимизировано. Если это псевдофайлы, то оптимизации могут быть на уровне libc и постоянных файловых дескрипторов для некоторых операций вроде listen. Иными словами вы в программе пишете open(«/socket/listening»), а реально это преобразуется во что-то вроде open(35, arg), а этот 35 на уровне ядра просто индекс функции.

Равно как и обычное сокетовое апи может быть аццке глючным, вроде того что в венде.

Псевдофайлы это прежде всего единый подход к организации АПИ и далеко не всегда это хорошо)

ixrws ★★★
()
Ответ на: комментарий от ixrws

единый подход к организации АПИ и далеко не всегда это хорошо)

судя по судьбе Plan 9 — ты прав

slackwarrior ★★★★★
()

beastie - К вам вопрос по поводу plan9, в связи с темой. Допустим, у нас есть хот-сит 2-х пользователей на одной машине. Оба имеют доступ к мыше и клавиатуре. Оба могут создавать исполняемые файлы и имеют права запускать демонов. Как в plan9 сделать так, чтобы пользуясь только юниксовыми правами доступа, а не мандатными, вроде селинуксов, запретить юзерам возможность слушать устройства ввода друг друга.

В частности, юзер А может без ведома юзера Б запустить демон, который будет читать весь клавиатурный ввод. И Б никак это не сможет проконтролировать, ведь права на чтение файлов клавиатуры и мыши у А и Б одинаковые.

next_time ★★★★★
()
Ответ на: комментарий от next_time

Не могу себя назвать большим специалистом по Plan9, но попытаюсь ответить.

Во первых multisit в терминах Plan9, как распределённой OS, не имеет смысла. Один терминал — один пользователь. Поработал, выключил (shutdown нет). Причём терминал — это именно терминал. Клавиатура, мышка, клавиатура. CPU/FS могут быть локальными, в соседней комнате или в Австралии.

Во вторых разделение прав реализовано через name spaces. (Ближайший из linux терминов будет пожалуй overlay fs.)

Т.е. каждое приложение (а не только пользователь) видит в своём namespace /dev/mouse и /dev/keyboard и так к ним и обращается. При этом, что это конкретно за мыши, клавиатуры, cpu и т.д. отвечает mount (и bind).

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Во первых multisit в терминах Plan9, как распределённой OS, не имеет смысла.

Так тем более.

Т.е. каждое приложение (а не только пользователь) видит в своём namespace /dev/mouse и /dev/keyboard и так к ним и обращается.

а как тогда из одного приложения послать сочетание клавиш другому приложению?

next_time ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.