Everything is a file. Except...

Jul 19, 2013 14:50

В отличие от многих других операционных систем, в которых для каждого типа устройств разрабатывался свой отдельный API, в юниксе изначально присутствовала концепция "everything is a file". В частности, обращение к драйверам устройств осуществляется через файлообразные объекты, обычно находящиеся в директории /dev. Естественно, устройства бывают разные, и эти различия проявляются в вызовах ioctl(), но и эти вызовы применяются к файловым дескрипторам, получаемым в результате операции open() над теми самыми псевдо-файлами устройств.

Однако, есть одно исключение: сетевые интерфейсы.
Хотя передача данных по сети и управление самими интерфейсами (например, назначение адресов, установка маршрутов, MTU, размеров очередей, и пр.) всё равно осуществляется через файлообразные объекты (сокеты) теми же вызовами read/write/ioctl, но сами сокеты образуются не в результате open("/dev/eth0"), а совершенно отдельным вызовом socket().

Кто-нибудь знает, почему для сетевых устройств было сделано такое исключение?

пятница, unix

Previous post Next post
Up