Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       flockfile, ftrylockfile, funlockfile - блокирует FILE для stdio

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <stdio.h>

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

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       Все функции, показанные выше:
           /* Since glibc 2.24: */ _POSIX_C_SOURCE >= 199309L
               || /* glibc <= 2.23: */ _POSIX_C_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

       Функции  stdio  можно без опаски использовать в нитях. Это достигается назначением каждому
       объекту FILE счётчика блокировок и (если счётчик не равен нулю) нити-владельца. При каждом
       библиотечном  вызове  эти  функции ждут разблокировки объекта FILE другой нитью, блокируют
       его, а затем выполняют заданную операцию ввода/вывода и разблокируют объект.

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

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

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

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

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

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

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При  успешном выполнении функция ftrylockfile() возвращает ноль (была получена блокировка)
       или ненулевое значение при ошибках.

ОШИБКИ

       Нет.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │flockfile(), ftrylockfile(), funlockfile()             │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

       Эти функции доступны, если определено _POSIX_THREAD_SAFE_FUNCTIONS.

СМ. ТАКЖЕ

       unlocked_stdio(3)

ПЕРЕВОД

       Русский   перевод   этой    страницы    руководства    был    сделан    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,   Dmitry   Bolkhovskikh  <d20052005@yandex.ru>,  Yuri  Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.