На багатьох пристроях основними операціями є пересилання байтів з комп'ютера на периферію або отримання байтів з периферії на комп'ютер. Такі пристрої схожі на труби і добре працюють як символьні пристрої . Для операцій, які не читають і не записують (наприклад, контроль потоку в послідовному рядку), пристрій надає спеціальні команди під назвою ioctl .
Деякі пристрої дуже схожі на звичайні файли: вони складаються з обмеженої кількості байтів, і те, що ви записуєте в заданій позиції, згодом можна прочитати з тієї ж позиції. Ці пристрої називаються блоковими пристроями .
Мережеві інтерфейси складніші: те, що вони читають і записують, - це не байти, а пакети. Хоча все-таки можна було б використовувати звичайний інтерфейс з, readі writeце було б незручно: імовірно, кожен виклик writeнадсилав би пакет, а кожен виклик отримував readби пакет (і якщо буфер занадто малий, щоб пакет міг вміститися, пакет буде втрачено).
Мережеві інтерфейси можуть існувати лише як пристрої, що надають ioctl. Насправді це роблять деякі варіанти Unix, але не Linux. У цьому підході є певна перевага; наприклад, в Linux мережеві інтерфейси можуть використовувати udev . Але переваги обмежені, тому цього не було зроблено.
Більшість програм, пов’язаних з мережею, не цікавляться індивідуальними мережевими інтерфейсами, вони працюють на більш високому рівні. Наприклад, веб-браузер хоче встановити TCP-з'єднання, а веб-сервер хоче прослуховувати TCP-з'єднання. Для цього корисні пристрої для мережевих протоколів високого рівня, наприклад
{ echo $'GET http://www.google.com/ HTTP/1.0\r';
echo $'Host: www.google.com\r';
echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80
Насправді ksh та bash забезпечують такий інтерфейс для клієнтів TCP та UDP. Однак у цілому мережеві програми складніші, ніж додатки для доступу до файлів. Хоча більшість обміну даними ведеться з дзвінками, аналогічними readта writeвстановленням з'єднання, вимагає більше інформації, ніж просто ім'я файлу. Наприклад, прослуховування TCP-з'єднань виконує два етапи: один повинен бути виконаний, коли сервер починає прослуховувати, і один, який повинен виконуватися щоразу, коли клієнт підключається. Такі додаткові кроки не вписуються добре в API файлу, що є основною причиною того, що в мережі є свій власний API.
Інший клас пристроїв, який, як правило, не має записів в /devLinux (але є в інших варіантах Unix), - це відеоадаптери. В принципі, прості відеоадаптери можуть бути викриті у вигляді пристроїв кадрів , які можуть бути блоковими пристроями з блоків, що представляють колір кожного пікселя. Прискорені відеоадаптери можуть бути представлені як символьні пристрої, на які програми надсилають команди. Тут недолік інтерфейсу пристрою полягає в тому, що він повільний: програмі, що відображає (на практиці X-сервер) потрібно було б робити дзвінки ядра щоразу, коли щось відображається. Замість цього відбувається те, що сервер X здебільшого записує безпосередньо у пам'ять відеоадаптера, оскільки це швидше.