.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 2001 Andries Brouwer . .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH flockfile 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ flockfile, ftrylockfile, funlockfile \- блокирует FILE для stdio .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBvoid flockfile(FILE *\fP\fIfilehandle\fP\fB);\fP \fBint ftrylockfile(FILE *\fP\fIfilehandle\fP\fB);\fP \fBvoid funlockfile(FILE *\fP\fIfilehandle\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP Все функции, показанные выше: .nf /* Since glibc 2.24: */ _POSIX_C_SOURCE >= 199309L || /* glibc <= 2.23: */ _POSIX_C_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH ОПИСАНИЕ Функции stdio можно без опаски использовать в нитях. Это достигается назначением каждому объекту \fIFILE\fP счётчика блокировок и (если счётчик не равен нулю) нити\-владельца. При каждом библиотечном вызове эти функции ждут разблокировки объекта \fIFILE\fP другой нитью, блокируют его, а затем выполняют заданную операцию ввода/вывода и разблокируют объект. .PP (Замечание: блокировка не учитывается, если блокировка файла осуществлялась функциями типа \fBflock\fP(2) и \fBlockf\fP(3).) .PP Всё это прозрачно и незаметно для программиста на С, но всё же есть две причины для более подробного изучения. Первая: возможны последовательности операций ввода/вывода в одной нити, при этом другая нить не будет прерывать ввод/вывод. Вторая: можно избежать чрезмерной нагрузки от блокировок. .PP С этой целью нить может явно блокировать объект \fIFILE\fP, осуществить серию операций ввода/вывода, а затем снять блокировку. При этом другие нити не могут вклиниться между операциями. Если причиной для реализации всего этого является повышение эффективности работы, то для ввода/вывод можно использовать неблокирующие версии функций stdio: \fBgetc_unlocked\fP(3) и \fBputc_unlocked\fP(3) вместо \fBgetc\fP(3) и \fBputc\fP(3). .PP Функция \fBflockfile\fP() ожидает, пока \fI*filehandle\fP не разблокируется другой нитью, затем делает текущую нить владельцем \fI*filehandle\fP и увеличивает счётчик блокировок. .PP Функция \fBfunlockfile\fP() уменьшает счётчик блокировок. .PP Функция \fBftrylockfile\fP() является неблокирующей версией \fBflockfile\fP(). Она ничего не делает в том случае, если другая нить владеет \fI*filehandle\fP, в противном случае устанавливает статус владельца и увеличивает счётчик блокировок. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении функция \fBftrylockfile\fP() возвращает ноль (была получена блокировка) или ненулевое значение при ошибках. .SH ОШИБКИ Нет. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBflockfile\fP(), \fBftrylockfile\fP(), \fBfunlockfile\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001. .PP Эти функции доступны, если определено \fB_POSIX_THREAD_SAFE_FUNCTIONS\fP. .SH "СМ. ТАКЖЕ" \fBunlocked_stdio\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .