.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2001 Andries Brouwer . .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH FLOCKFILE 3 "9 июня 2020 г." "" "Руководство программиста Linux" .SH ИМЯ flockfile, ftrylockfile, funlockfile \- блокирует FILE для stdio .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 .ad l .PP Все функции, показанные выше: .RS 4 /* начиная с glibc 2.24: */ _POSIX_C_SOURCE\ >=\ 199309L || /* Glibc versions <= 2.23: */ _POSIX_C_SOURCE || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .RE .ad b .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; lbw29 lb lb l l l. Интерфейс Атрибут Значение T{ \fBflockfile\fP(), \fBftrylockfile\fP(), \fBfunlockfile\fP() T} Безвредность в нитях MT\-Safe .TE .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" POSIX.1\-2001, POSIX.1\-2008. .PP Эти функции доступны, если определено \fB_POSIX_THREAD_SAFE_FUNCTIONS\fP. .SH "СМ. ТАКЖЕ" \fBunlocked_stdio\fP(3) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .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 .