LOCKFILE(3)

НАЗВАНИЕ
flockfile, ftrylockfile, funlockfile - блокировка FILE для потока stdio

СИНТАКСИС
#include <stdio.h>

void flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);

ОПИСАНИЕ
Функции stdio являются безопасными для подпроцессов. Это достигается назначением каждому объекту FILE номера блокировки lockcount и (если lockcount не равно нулю) главного владеющего процесса. Для каждого библиотечного вызова эти функции будут ожидать до тех пор, пока объект FILE более не блокирован другим процессом, и только затем блокируют его, выполняют заданную операцию ввода/вывода и разблокруют объект снова.

(Примечание: это блокирование ничего не делает, если блокировка файла осуществляется функциями типа flock(2) и lockf(3).)

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

Наконец, подпроцессы могут явно блокировать объект FILE, затем осуществить серию операций ввода/вывода, затем снять блокировку. Это предотвращает другие подроцессы от вставки своих команд во время всех этих действий. Если причиной для реализации всего этого является повышение эффективности работы, то можно использовать ввод/вывод с неблокируемыми версиями функций stdio: с getc_unlocked() и putc_unlocked() вместо getc() и putc().

Функция flockfile() ожидает, чтобы *filehandle был разблокирован другими подроцессами, затем делает текущий процесс владельцем *filehandle, и увеличивает lockcount.

Функция funlockfile() уменьшает счетчик блокировок.

Функция ftrylockfile() является неблокируемой версией flockfile(). Она ничего не делает в том случае, если другие процессы владеют *filehandle, или иначе получает статус владельца и увеличивает счетчик блокировок.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция ftrylockfile() возвращает ноль при нормальном завершении работы (была получена блокировка) или ненулевое значение при ошибках.

НАЙДЕННЫЕ ОШИБКИ
Нет.

ДОСТУПНОСТЬ
Эти функции доступны при определении _POSIX_THREAD_SAFE_FUNCTIONS. Они присутствуют в libc начиная с версии 5.1.1 и в glibc начиная с версии 2.0.

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1

СМ. ТАКЖЕ
unlocked_stdio(3)