Поиск

Вопросы и ответы

Можно ли сохранять структуры данных, описанные на 13-м занятии, "Структуры и ссылки", в DBM-файле или текстом файле?

Если ответить с ходу, то нет, хотя в принципе это возможно, но довольно сложно. Для начала нужно преобразовать "структуру" в строку, которая будет представлять данные и саму структуру, их содержащую. После этого полученную строку нужно использовать как значение ключа в хэше, связанном с DBM-файлом. В Perl предусмотрен специальный модуль, который все это делает автоматически. Его имя — Data::Dumper.

Как можно заблокировать DBM-файл?

DBM-файлы блокируются с помощью системы семафоров, которая была описана на этом занятии. Вам нужно использовать функции get _lock{) и release lock(), описанные в листинге 15.3. Поместите эти функции перед открытием DBM-фаила и после его закрытия, как показано в следующем примере:

Можно каким-нибудь образом проверить, приведет ли вызов функции flock к паузе в работе программы без реальной приостановки выполнения программы?

Да, это возможно. У функции flock предусмотрено специальное значение параметра, использование которого не приводит к приостановке выполнения программы. Такой вызов функции flock называется неблокирующим. Чтобы проверить, вызовет ли функция flock приостановку в выполнении программы, поместите значение | LOCK_NB после типа блокировки, как показано ниже,

Более того, вы даже можете перевести программу на некоторое время в состояние ожидания, а затем вывести соответствующее сообщение, если в конечном итоге не удастся выполнить блокировку через заданное число попыток. Вот пример: