Що і де файл у кожному сокеті?
"Все" - це перебільшення. Це не сувора політика, це просто звичайна практика використання файлової системи для інтерфейсів, оскільки доступ до файлової системи є синонімом системних викликів (тобто файлова система справді є інтерфейсом з ядром, і тому забезпечує зручний формат для всіляких речей) . Інші операційні системи не користуються цим сильно, тому це вважається відмінною рисою.
Як згадує Hauke Laging, "unix local" розетки мають вузол файлу, як і названі труби (див. man fifo
). Однак розетки протоколу Інтернету (використовуються для мережевого зв'язку) цього не роблять. Натомість вони асоціюються в просторі користувачів з номером порту. Зауважте, що серверний сокет на одному порту з'єднує декілька клієнтів, кожен з яких має власний індивідуальний сокет (один файл локального сокета unix також може бути використаний таким чином із сервером, тобто може бути декілька сокетів, пов'язаних з однією адресою файлу) а в коді вони насправді ідентифікуються індивідуально через окремі дескриптори файлів чисел .
Таким чином, в цьому сенсі все сокети є так само, як файли, і є посилання в /proc/[pid]/fd/
. Ви навіть можете зателефонувати readlink()
на цей inode і отримати спеціальний вид імені файлу, який використовується в інструментах командного рядка, таких як lsof
, я вважаю; також ви можете отримати інформацію про дескриптор сокета через fstat()
.