Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KR AIO.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
69.38 Кб
Скачать

1Сумісне використання файлів. Блокування і розблокування файлів.

Оператор LOCK (<файл>[,<секунд>]) исключает возможность доступа другим пользователям к записям файла до тех пор, пока не будет выполнен оператор UNLOCK(<файл>).

Как и для оператора HOLD, результат исполнения оператора LOCK зависит от драйвера файла, который предпринимает действия, соответствующие данной файловой системе. В некоторых файловых системах системный сбой автоматически разблокирует файл, в других - файл остается заблокированным. В документации на соответствующий драйвер описано конкретное исполнение оператора LOCK.

Если в приложении действительно требуется заблокировать файл, то нужно стараться максимально сузить период времени, в течение которого запрещается доступ к файлу другим пользователям. Желательно, чтобы в промежутке исполнения программы между операторами LOCK и UNLOCK не требовался ввод данных пользователем.

Есть две формы взаимной блокировки. Первая - когда два пользователя пытаются в разном порядке заблокировать одну и ту же группу файлов. Вот примерный сценарий:

Пользователь P1 блокирует файл А

Пользователь P2 в это же время блокирует файл Б

Пользователь P1 пытается заблокировать файл Б и не может, поскольку P2 его уже заблокировал

Пользователь P2 пытается заблокировать файл А и не может, поскольку P1 его уже заблокировал

Пытаясь получить контроль над файлами, оба пользователя “повисают”. Выход из данной ситуации состоит в принятии на программном уровне простого соглашения: блокировку файлов осуществлять всегда в одном и том же порядке (например, по алфавиту), при этом отслеживать блокировки со стороны других пользователей. Проиллюстрируем этот принцип примером:

LOOP

LOCK(FileA,1) ! Попытка заблокировать в течение 1 секунды

IF ERROR() = ‘FILE IS ALREADY LOCKED’

CYCLE ! и попытаться снова

END

LOCK(FileB,1) ! Попытка заблокировать в течение 1 секунды

IF ERROR() = ‘FILE IS ALREADY LOCKED’

UNLOCK(FileA) ! разблокировать уже заблокированный файл

CYCLE ! и попытаться снова

END

BREAK !выйти из цикла когда заблокированы оба файла

END

! Обработка файлов FileA и FileВ

UNLOCK(FileB) ! разблокировать заблокированные файлы

UNLOCK(FileA)

2Довільний доступ до файлів. Форми доступу до файлів.

(2.1)Оператор GET - единственный в языке оператор, с помощью которого осуществляется произвольный доступ к файлу. В отличие от оператора SET, оператор GET либо считывает запись из файла, либо выдает сообщение об ошибке. Для оператора GET не используется механизм “нечеткой логики”. Существует три формы оператора GET. С их помощью можно считывать записи по значению ключа, по номеру записи и по номеру ключа. Оператор GET не влияет на последовательную (SET/NEXT или SET/PREVIOUS) обработку файла. Это означает, что исполнение оператора GET в процессе последовательной обработки не приводит к изменению указателя записи для последовательной обработки.

(2.2)Существуют два способа доступа к записи в файле: последовательный доступ и произвольный доступ. Последовательный доступ означает извлечение нескольких записей для обработки их в определенной последовательности. Произвольный доступ подразумевает извлечение и обработку одной конкретной записи. Почти в любой программе работающей с базой данных применяется как тот, так и другой способ.

Если требуется извлекать записи из файла в их физической последовательности – по номеру, - то для этого достаточно только файла данных. Если требуется произвольно извлечь запись и точно известно ее местоположение в файле (ее номер), то и для этого также достаточно только файла данных. Однако для большинства приложений такая однобокость была бы слишком большим ограничением.

3Словник даних. При описании атрибутов столбца в закладке ВАЛИДИТИ ЧЕКС в поле МАСТ БИ ИН ТЕЙБЛ указать имя родительской таблиці для того чтоби?: 4) Знаячения поля столбца при вводе всегда віюиралось только из родительской таблици.

Білет 10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]