#include <stdio.h> void flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);
(Примечание: это блокирование ничего не делает, если блокировка файла осуществляется функциями типа flock(2) и lockf(3).)
Все это прозрачно и незаметно для программистов на С, но все же есть две причины для более подробного изучения. С одной стороны, возможны последовательности операций ввода/вывода в одном семействе подпроцессов, при этом другие процессы (не из этой ветви) не должны вмешиваться в работу операций ввода/вывода. С другой стороны, так можно избежать блокировок свыше для большей эффективности.
Наконец, подпроцессы могут явно блокировать объект FILE, затем осуществить серию операций ввода/вывода, затем снять блокировку. Это предотвращает другие подроцессы от вставки своих команд во время всех этих действий. Если причиной для реализации всего этого является повышение эффективности работы, то можно использовать ввод/вывод с неблокируемыми версиями функций stdio: с getc_unlocked() и putc_unlocked() вместо getc() и putc().
Функция flockfile() ожидает, чтобы *filehandle был разблокирован другими подроцессами, затем делает текущий процесс владельцем *filehandle, и увеличивает lockcount.
Функция funlockfile() уменьшает счетчик блокировок.
Функция ftrylockfile() является неблокируемой версией flockfile(). Она ничего не делает в том случае, если другие процессы владеют *filehandle, или иначе получает статус владельца и увеличивает счетчик блокировок.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |