Система адресации данных — это одна из самых существенных составных частей файловой системы. Именно система адресации позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске. Файловая система ext2 использует следующую схему адресации блоков файла. Для хранения адреса файла выделено 15 полей, каждое из которых состоит из 4 байт. Если размер файла меньше или равен 12 блоков, то номера этих кластеров непосредственно перечисляются в первых двенадцати полях адреса. Если размер файла превышает 12 блоков, то следующее 13-е поле содержит адрес кластера, в котором могут быть расположены номера следующих блоков файла. Таким образом, 13-й элемент адреса используется для косвенной адресации. При максимальном размере блока равном 4096 байт, 13-й элемент, может содержать до 1024 номеров следующих кластеров данных файла. Если размер файла превышает 12+1024 блоков, то используется 14-е поле, в котором находится номер блока, содержащего 1024 номеров блоков, каждый из которых хранят 1024 номеров блоков данных файла. Здесь применяется уже двойная косвенная адресация. И наконец, если файл включает более 12+1024+1048576 = 1049612 блоков, то используется последнее 15-е поле для тройной косвенной адресации.
|
|
Таким образом, описанная выше система адресации, позволяет при максимальном размере блока 4 Кб иметь файлы размера до 2 терабайт.
11. Cетевой чат на основе именованных каналов с выделенным сервером
---------------------------------------------------------------------------------------
Для работы с именованным каналом используется функция CreateNamePipe
Именованные каналы.
Каналы – способ локального и сетевого взаимодействия.
5) функции сервера
6) функции клиента
Каналы должны быть с одним именем.
5. СЕРВЕР
Создать канал: HANDLE CreateNamePipe(
LPCTSRT pipename,
DWORD openmode, // режим открытия
DWORD pipemode,
DWORD maxinstance,
DWORD outbufsize,
DWORD inbufsize,
LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности
)
Имя канала: \\.\pipe\<имя > - до 256 символов
FILE_FLAG_FIRST_PIPE_INSTANCE – может присутствовать во втором параметре:
PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND
FILE_FLAG_WRITE_THROUGH – если процессы находятся на разных машинах в сети
FILE_FLAG_OVERLAPPED – асинхронный режим (для канала)
PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE – каждая запись в канал – пакет
PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE
MAXINSTANCES – max допустимое число каналов с таким именем
PIPE_UNLIMITED_INSTANCES
DEFOULTTimeout – время ожидания
Серверная сторона
CREATE_NAMED_PIPE
BOOL ConnectNamePipe(HANDLE h, LPOVERLAPPED Ov)
BOOL DisconnectNamedPipe(HANDLE h)
6. КЛИЕНТ
BOOL WiatNamedPipe(LPCTSTR Name, DWORD TimeOut)
Подключиться к каналу:
CreateFile
В виде имени – имя канала \\<pc>\piep\<имя>
BOOL CallNamedPipe(
LPCTSTR NamePipe, //имя канала
LPVOID InBuf, // входные параметры
DWORD InSize, // сколько будет отправлено байт
LPVOID OutBuf, // выходной результат
DWORD OutSize, // полный размер буфера
LPDWORD BytesRead, // сколько реально прочитано
DWORD TimeOut)