Являются файлами UNIX для интернет-сокетов?

Я понимаю, что «Все является файлом» является одной из основных концепций Unix, но сокеты используют разные API, которые предоставляются ядром (например, socket, sendto, recv и т. Д.), А не обычные интерфейсы файловой системы.

Как это «все есть файл» применяется здесь?

  • Сигнал дистанционного управления
  • Что означает Unix-программирование?
  • ПОЧЕМУ ** ** login ** оболочка над ** не-login ** оболочкой?
  • Является ли Linux Unix?
  • Как реплицировать данные из / dev / log на несколько приемников rsyslog
  • Почему существует AF_NETLINK? Недостаточно AF_UNIX?
  • Зачем нужны индексы?
  • Unix и Linux без файловой системы?
  • 4 Solutions collect form web for “Являются файлами UNIX для интернет-сокетов?”

    сокеты используют разные API

    Это не совсем так. Существуют некоторые дополнительные функции для использования с сокетами, но вы можете использовать, например, обычные функции read() и write() на сокете fd.

    как это «все есть файл» применяется здесь?

    В том смысле, что задействован дескриптор файла.

    Если ваше определение «файл» представляет собой дискретную последовательность байтов, хранящихся в файловой системе, то не все это файл. Однако, если ваше определение файла более похоже на дескриптор – канал для информации, т. Е. Соединение ввода-вывода – тогда «все является файлом» начинает иметь больше смысла. Эти вещи неизбежно включают последовательности байтов, но там, где они происходят или идут, могут различаться контекстно.

    Однако это не значит буквально. Демон – это не файл, демон – это процесс; но если вы выполняете IPC, ваш метод связи с другим процессом может быть смягчен объектами стиля файла.

    «Все – файл» – это просто преувеличение. Это был роман в 1970-х годах, и он был основным отличительным признаком UNIX. Но это всего лишь маркетинговая концепция, а не реальная основа UNIX, потому что это, очевидно, не так. Не полезно или разумно рассматривать ВСЕ как файл.

    Является ли CPU файлом? Ваша программа считывает () процессор для получения новой инструкции? Является ли RAM файлом? Ваша программа читает () следующий байт?

    В то время существовали виды ОС, которые предоставили вам один API для гибкого диска и другой API для жесткого диска, другой API для магнитной ленты и множество различных API для разных терминалов и т. Д. Системы мейнфреймов IBM имели разные типы файлов на жестких дисках и предоставляли вам разные API для каждого из них, верьте или нет! Таким образом, подход UNIX «это файл», а также подход «stdin / stdout / stderr» принесли очень элегантную абстракцию как пользователям, так и программистам.

    С сетью эта конкретная абстракция просто не сработала. И нет никакого вреда, чуть меньше общей элегантности и согласованности ОС. Но это работает. Вы видите файл под названием /dev/myinternetz/www/google/com/tcp/80 любой точке вашей системы сегодня? Можете ли вы открыть () его, написать () запрос и прочитать () ответ в хорошем HTML? Нет? Это связано с тем, что абстракция «является файлом» не очень удобна для взаимодействия по сети. На практике это не будет работать слишком хорошо. Закон протекающих абстракций в действии.

    Если вы stat сокет, вы увидите, что он имеет номер inode и другие характеристики обычных файлов, поэтому я бы классифицировал его как файл в файловой системе. Пример:

     # file live live: socket # stat live File: `live' Size: 0 Blocks: 0 IO Block: 4096 socket Device: fc03h/64515d Inode: 198817 Links: 1 Access: (0660/srw-rw----) Uid: (23129/ icinga) Gid: (23130/icinga-cmd) Access: 2014-11-07 09:27:59.000000000 -0800 Modify: 2014-11-05 09:27:03.000000000 -0800 Change: 2014-11-05 09:27:03.000000000 -0800 

    11/17. Дополнительная информация для Linux (ext3): Сокет имеет индексный дескриптор (который является 256-байтовым блоком на диске), но не имеет блоков данных (вы можете это проверить, извлекая индексный индекс и исследуя указатели блока данных или запускает debugfs 'stat', который показывает Blockcount из 0). Таким образом, у него есть метаданные файлов (владелец, группа, разрешения и т. Д.), Но нет содержимого данных на диске. Это совпадает с обычным пустым файлом ( touch /tmp/foo ), который также имеет номер кадра 0. В первом случае поле «type» в inode показывает «socket»; во втором случае он показывает «обычный файл».

    Ссылки: внешняя структура ext2 ; stat , dumpe2fs и debugfs .

    Сокеты – это файлы. Вы можете использовать read и write в сокете: они эквивалентны вызову recv и send with flags=0 . Вы закрываете их close . Вы можете перемещать их с помощью dup и друзей, если вам нужно перетасовать файловые дескрипторы. Вы можете установить несколько флагов с помощью fcntl и использовать буферизацию stdio после вызова fdopen . Список можно продолжить. Очень важно, что вы можете вызывать select и poll для любого типа файлов, включая сокеты, поэтому эти функции позволяют программе блокировать до тех пор, пока он не получит вход с помощью каких-либо средств, просто перечисляя дескрипторы файлов.

    Существуют дополнительные системные вызовы для некоторых типов сокетов ( recv и send , shutdown и т. Д.), Например, есть дополнительный системный вызов для устройств ( ioctl ).

    Не у всех файлов есть имена , а у тех, которые это делают, они не всегда живут в структуре каталогов. Трубы, созданные pipe (например, в конвейере оболочки) и сокеты, созданные socketpair , не имеют имен, но они все еще являются файлами. Сокеты, созданные socket имеют имя, синтаксис которого зависит от домена. Это имя передается в struct sockaddr для bind и других функций. Для сокета Unix ( AF_UNIX ) имя представляет собой struct sockaddr_un , которая является семейством и строкой; в зависимости от строки это может быть имя файла (так называемые сокеты могут быть созданы с mknod во многих вариантах unix) или нет (абстрактное пространство имен). Для сокета IPv4 ( AF_INET ) имя представляет собой struct sockaddr_in , содержащий номер порта и IP-адрес, а также protocol из вызова socket .

    Interesting Posts

    Установите отображение кнопок тачпада с помощью файлов xorg

    Что означает ls -alh?

    Отключение xscreensaver, когда firefox воспроизводит видео HTM5

    Правильный способ распределения нескольких научных экспериментов на нескольких серверах?

    Тестирование, если файлы начинаются с определенных букв и не содержат специального символа, за исключением периода в конце рядом с расширением файла в сценарии оболочки

    Каков наиболее сжатый способ вставки или обновления строки?

    Проблемы с установкой источника

    dm-0: WRITE SAME не удалось. Ручное обнуление. Centos 7.1 на VmWare ESXI 5.5

    Как мне узнать, сколько времени занимает pg_restore в командной строке?

    Как связать несколько команд tmux с одним нажатием клавиши?

    readline – почему он делает только возврат каретки, а не линию при достижении конца строки?

    Arch: эквивалент pactree для AUR

    Как настроить выбор awk на содержимое поля 1?

    Легкое регулярное выражение в журналах Apache

    Менеджер загрузки linux заблокирован

    Linux и Unix - лучшая ОС в мире.