Читаем Язык программирования Euphoria. Справочное руководство полностью

include file.e

i1 = lock_file(fn, i2, s)

Описание:

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

lock_file() как раз и запирает открытый файл, fn, чтобы предотвратить параллельный доступ других процессов к файлу в то время, когда ваша программа читает файл или пишет в него. Под Linux/FreeBSD имеется два типа замков, которые вы можете выбрать, используя параметр i2. (Под DOS32 и WIN32 параметр i2 игнорируется, но должен быть типа integer.) Выбирайте shared (общий) замок, когда вам необходимо читать из файла и вы хотите временно заблокировать другие процессы от записи в этот файл. Выбирайте exclusive (исключительный) замок, когда вам необходима запись в файл и требуется временная блокировка других процессов и от записи, и от чтения вашего файла. Один и тот же файл может иметь общие замки от многих процессов, но только один процесс может ставить исключительный замок, и это может быть только в том случае, когда ни один другой процесс не имеет никакого замка для этого файла. Библиотечный файл file.e содержит следующее объявление:

global constant LOCK_SHARED = 1,

LOCK_EXCLUSIVE = 2

Под DOS32 и WIN32 вы можете запирать назначенную часть файла, используя аргумент s. Переменная s должна быть типа ряд и иметь форму: {первый_байт, последний_байт}. Ряд обозначает первый и последний байты участка в файле, к которому применен замок. Задавайте пустой ряд {}, если вы хотите запереть весь файл. В данном выпуске для Linux/FreeBSD может быть заперт только весь файл, поэтому в качестве аргумента s вы должны задавать {}.

Если функция выполнена успешно, lock_file() выдаёт 1. Если запирание не удалось, выдаётся 0. lock_file() не ожидает, пока другие процессы снимут свои замки. Вам могут понадобиться повторные вызовы данной функции, прежде чем запрос замка будет удовлетворен.

Комментарии:

Под Linux/FreeBSD эти замки называются "консультативными", податливыми замками, это означает, что они осуществляются не операционной системой. Они указывают, как процессы могут использовать отдельные особые файлы во взаимодействии со всеми другими процессами. Процесс может получить доступ к файлу без предварительного его запирания для других процессов. Под WIN32 и DOS32 запирание файлов осуществляется операционной системой.

Под DOS32 lock_file() более полезна, когда доступ к файлам общий. Вне Windows, под чистой MS-DOS, функция обычно выдаёт 0 (неуспешно).

Пример:

include misc.e

include file.e

integer v

atom t

v = open("visitor_log", "a") -- открыт для дополнения

t = time()

while not lock_file(v, LOCK_EXCLUSIVE, {}) do

if time() t + 60 then

puts(1, "Уже прошла целая минута ... Я не могу ждать вечно!\n")

abort(1)

end if

sleep(5) -- позволим идти другим процессам

end while

puts(v, "Ещё один посетитель\n")

unlock_file(v, {})

close(v)

См. также:

unlock_file, flush, sleep

lock_memory

Платформа:

DOS32

Синтаксис:

include machine.e

lock_memory(a, i)

Описание:

Предохраняет участок виртуальной памяти, начинающийся по адресу a, имеющий длину i, от перекачки на диск.

Комментарии:

Используйте данную процедуру, чтобы быть уверенным, что весь код и данные, необходимые для обработки прерываний, хранятся в памяти во всё время исполнения вашей программы. lock_memory() может потребоваться только в крайне специальной ситуации, когда вы установили свой собственный обработчик машинного прерывания DOS, использующий машинный код. Когда машинное прерывание срабатывает, у операционной системы теряется всякая возможность обратиться к коду или данным, которые были выгружены на диск, поэтому вам нужна защита всех участков памяти с машинным кодом или данными, которые будут необходимыми при обслуживании прерывания.

Пример программы:

demo\dos32\hardint.ex

См. также:

get_vector, set_vector

log

Синтаксис:

x2 = log(x1)

Описание:

Выдаёт натуральный логарифм x1.

Комментарии:

Эта функция может быть применена к атому или ко всем элементам ряда. Заметьте, что логарифм определён только для положительных чисел. Ваша программа будет прервана с сообщением об ошибке, если вы попытаетесь взять логарифм отрицательного числа или нуля.

Пример:

a = log(100)

-- a будет равно 4.60517

См. также:

sin, cos, tan, sqrt

lower

Синтаксис:

include wildcard.e

x2 = lower(x1)

Описание:

Преобразует атом или ряд на латинском алфавите к нижнему регистру.

Пример:

s = lower("Euphoria")

-- s будет равно "euphoria"

a = lower('B')

-- a будет равно 'b'

Перейти на страницу:

Все книги серии Euphoria

Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных