Блок керування файлом (, FCB) — це структура файлової системи, у якій зберігається стан відкритого у. FCB керується операційною системою, але перебуває в пам'яті програми, яка використовує файл, а не в пам'яті операційної системи. Це дає змогу процесу одночасно мати відкритою будь-яку кількість файлів, за умови, що він може виділити достатньо пам'яті для одного FCB на кожен файл.
FCB походить із CP/M і також присутній у більшості варіантів DOS, хоча лише як засіб зворотної сумісності у версіях MS-DOS 2.0 та пізніших. Повний FCB має довжину 36 байтів; у ранніх версіях CP/M він мав 33 байти. Цей фіксований розмір, який не можна було збільшити без порушення сумісності застосунків, зрештою призвів до зникнення FCB як стандартного методу доступу до файлів.
Значення кількох полів у FCB відрізняються між CP/M і DOS, а також залежать від того, яка операція виконується. Наведені нижче поля мають узгоджені значення: Offset Bytesize Contents 0x00 1 Номер диска — 0 для типового, 1 для A:, 2 для B:, ... 0x01 8 Назва файлу та розширення — разом вони утворюють назву файлу 8.3. 0x09 3 0x0C 20 Залежить від реалізації — перед відкриттям FCB має бути ініціалізоване нулями. 0x20 1 Номер запису в поточному розділі файлу — використовується під час виконання послідовного доступу. 0x21 3 Номер запису, який використовується під час виконання довільного доступу.
Поле довжиною 20 байтів, що починається зі зсуву 0x0C, містило поля, які, серед іншого, надавали додаткову інформацію про файл: Offset Bytesize Contents 0x0E 2 Довжина запису файлу в байтах. 0x10 4 Загальний розмір файлу в байтах. 0x14 2 Дата останньої зміни вмісту файлу. 0x16 2 Час останньої зміни.
Використання
У CP/M, 86-DOS і PC-DOS 1.x/MS-DOS 1.xx FCB був єдиним методом доступу до файлів. У DOS кілька підфункцій INT 21h надавали інтерфейс для виконання операцій над файлами за допомогою FCB. Коли в MS-DOS 2 готувалася підтримка кількох процесів або користувачів, використання інших файлових систем крім FAT або спільного використання файлів через мережі в майбутньому, вважалося, що FCB були надто малими для зберігання додаткових даних, необхідних для таких можливостей, і тому FCB вважалися непридатними для різних напрямів майбутнього розширення. Крім того, вони не містили поля для задання підкаталогів. Надання даних, пов'язаних із файловою системою, у простір користувача також розглядалося як загроза безпеці. Тому FCB були витіснені дескрипторами файлів, які використовувалися в Unix та його похідних. Дескриптори файлів — це просто послідовні цілі числа, пов'язані з конкретними відкритими файлами.
Якщо програма використовує новіший API дескрипторів файлів для відкриття файлу, операційна система керує своєю внутрішньою структурою даних, пов'язаною з цим файлом, у власній області пам'яті. Це має велику перевагу: у наступних версіях операційної системи ці структури можуть збільшуватися за розміром без порушення сумісності з прикладними програмами; недоліком є те, що, з огляду на досить примітивне керування пам'яттю DOS, під час завантаження необхідно зарезервувати місце для такої кількості цих структур, яку, ймовірно, використовуватиме найбільш «вимоглива до файлів» програма, і це місце не може використовуватися для жодної іншої мети під час роботи комп'ютера. Таке резервування пам'яті виконується за допомогою директиви FILES= у файлі CONFIG.SYS. Ця проблема не виникає з FCB у DOS 1 або CP/M, оскільки операційна система зберігає всю необхідну інформацію про відкритий файл усередині FCB і тому не потребує використовувати окрему для кожного файлу пам'ять у просторі пам'яті операційної системи. Під час використання FCB у MS-DOS 3 або пізніших версіях формат FCB залежить від того, чи завантажено SHARE.EXE, а також від того, чи посилається FCB на локальний або віддалений файл, і часто посилається на запис SFT. Через це кількість FCB, які можна одночасно залишати відкритими в DOS 3 або новішій версії, також обмежена, зазвичай до 4; за допомогою директиви FCBS= у файлі CONFIG.SYS це число за потреби можна збільшити. У DR-DOS і FILES, і FCBS походять з одного внутрішнього пулу доступних структур дескрипторів і призначаються динамічно за потреби.
FCB підтримувалися в усіх версіях MS-DOS і Windows до появи файлової системи FAT32. Windows 95, Windows 98 і Windows Me не підтримують використання FCB на дисках FAT32 через 32-бітні номери кластерів, за винятком читання мітки тому. Через це деякі старі DOS-застосунки, зокрема WordStar, не працювали в цих версіях Windows.
Інтерфейс FCB також не працює належним чином у Windows NT, 2000 тощо — WordStar не функціонує належним чином у цих операційних системах. Емулятори DOS DOSEMU і DOSBox правильно реалізують інтерфейс FCB, тому вони дають змогу запускати старіші програми DOS, яким потрібні FCB, у сучасних операційних системах.
Примітки