Создает ли ядро ​​Linux файл для сокета домена Интернета?

Для этого я использую одну из глобальных горячих клавиш -для OS X. Первый, одноименный,не имеет текстового файла для хранения ваших конфигураций, но вы можете хранить их в каталоге ярлыков (псевдонимов ), которые вы хотите. Каждый псевдоним связан с ключом записью в глобальных каталогах горячих клавиш. Вы можете настроить команду терминала как псевдоним, например this .

3
06.01.2019, 20:42
2 ответа

Нет, не в смысле файла на жестком -диске или другом блочном устройстве.

Если вы посмотрите на socket.c в исходном коде Linux, вы увидите, что он создает inode для сокетов, однако данные находятся в файловой системе sockfs , которая является виртуальной файловой системой. внутри самого ядра, а пространство выделяется с помощью функции типа kmalloc. В этом смысле сокеты — это анонимные файлы, находящиеся в памяти.

Это возвращает нас к концепции «всё является файлом в Unix», которая представляет собой шаблон проектирования, ориентированный на наличие общих утилит для выполнения тех же функций, что и файлы на реальных физических носителях. Как заявил Линус Торвальдс :

The whole point with "everything is a file" is not that you have some random filename (indeed, sockets and pipes show that "file" and "filename" have nothing to do with each other), but the fact that you can use common tools to operate on different things.

Таким образом, сокеты имеют inode для доступа к файлу -, но не присутствуют в физической файловой системе.

Тем не менее, обратите внимание, что существуют доменные сокеты Unix, которые представляют собой объект типа IPC, предназначенный для объединения процессов в сеть, и находятся в дисковых файловых системах.

5
27.01.2020, 21:13

The Linux kernel creates a file for a Unix domain socket bound to a pathname.

Хорошо.

Does the Linux kernel create a file for an Internet domain socket?

Нет. Привязка сокета к IP-адресу+порту не создает имя пути. Он не создает файл где-то, что вы можете видеть.

bind()на сокете AF_INET/AF_INET6не создает никаких файлов в какой-либо физической файловой системе. Вызов bind()не будет генерировать файл ни в одной из встроенных виртуальных файловых систем. (Конечно, вы можете написать свою собственную файловую систему FUSE, которая каким-то образом имитирует netstat -46, чтобы создать новый файл ).

1
27.01.2020, 21:13

Теги

Похожие вопросы