"Персонаж за часом" - це неправильне значення (як це ідея, що пристрої символів обов'язково не підтримують пошук і передачу). Насправді пристрої "блокувати за один раз" (тобто суворо орієнтовані на запис, наприклад, стрічковий накопичувач *) повинні бути пристроями символів. Таким чином, ідея про те, що символьний пристрій обов'язково повинен бути невидимим - драйвери символьних пристроїв визначають повну file_operations
структуру, яка вільна визначати llseek чи ні, залежно від того, підтримує пристрій операцію. Приклади символів, які більшість людей вважають прикладами, є нульовими, urandom, TTY-пристроями, звуковою картою, мишкою тощо ..., які неможливо побачити через специфіку того, що ці пристрої є, але / dev / vcs, / dev / fb0 , і / dev / kmem - також пристрої символів, і всі вони шукаються.
Як я вже згадував, драйвер пристрою символів визначає структуру file_operations, яка має покажчики функцій для всіх операцій, які, можливо, хтось захоче зателефонувати на файл - шукати, читати, писати, ioctl і т. Д. - і всі вони викликаються один раз, коли відповідний системний виклик виконується з відкритим файлом пристрою. І тому читати і писати може робити все, що завгодно, за допомогою своїх аргументів - він може відмовитись прийняти написання, яке є занадто великим, або написати лише те, що підходить; він може читати лише ті дані, що відповідають одному запису, а не всю запитувану кількість байт.
Отже, що таке блок-пристрій? В основному, блокові пристрої - це дисководи. Жоден інший тип пристроїв (крім віртуальних дискових накопичувачів, таких як ramdisk та loopback) не є блоковим пристроєм. Вони інтегровані в систему запитів вводу / виводу, рівень файлової системи, буфер / кеш-систему та систему віртуальної пам'яті таким чином, щоб пристрої символів не були, навіть коли ви звертаєтесь, наприклад, / dev / sda з користувальницького процесу . Навіть "необроблені пристрої", які сторінка згадує як виняток, є пристроями символів .
* Деякі системи UNIX реалізували те, що тепер називається "режим фіксованого блоку" - який дозволяє групі ядер і розділяти запити вводу / виводу для встановлення встановлених меж блоку більш-менш таким же чином, як це робиться для дисководів - як блок пристрій. Для "режиму змінного блоку" потрібен символьний пристрій, який зберігає межі блоку в користувацькій програмі як єдиний запис (2) виклик записує один блок, а один виклик читання (2) повертає один блок. Оскільки перемикання режимів зараз реалізоване як іоктол, а не як окремий файл пристрою, використовується пристрій символів. Пристрої змінних записів на стрічку здебільшого "не підлягають пошуку", тому що пошук передбачає підрахунок числа записів, а не кількість байтів, а нативної операції пошуку реалізовані як ioctl.