.\" -*- 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 "2 мая 2024 г." "Linux man\-pages 6.8" .SH ИМЯ flockfile, ftrylockfile, funlockfile \- блокирует FILE для stdio .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \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 .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P Все функции, показанные выше: .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 другой нитью, блокируют его, а затем выполняют заданную операцию ввода/вывода и разблокируют объект. .P (Замечание: блокировка не учитывается, если блокировка файла осуществлялась функциями типа \fBflock\fP(2) и \fBlockf\fP(3).) .P Всё это прозрачно и незаметно для программиста на С, но всё же есть две причины для более подробного изучения. Первая: возможны последовательности операций ввода/вывода в одной нити, при этом другая нить не будет прерывать ввод/вывод. Вторая: можно избежать чрезмерной нагрузки от блокировок. .P С этой целью нить может явно блокировать объект \fIFILE\fP, осуществить серию операций ввода/вывода, а затем снять блокировку. При этом другие нити не могут вклиниться между операциями. Если причиной для реализации всего этого является повышение эффективности работы, то для ввода/вывод можно использовать неблокирующие версии функций stdio: \fBgetc_unlocked\fP(3) и \fBputc_unlocked\fP(3) вместо \fBgetc\fP(3) и \fBputc\fP(3). .P Функция \fBflockfile\fP() ожидает, пока \fI*filehandle\fP не разблокируется другой нитью, затем делает текущую нить владельцем \fI*filehandle\fP и увеличивает счётчик блокировок. .P Функция \fBfunlockfile\fP() уменьшает счётчик блокировок. .P Функция \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 .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001. .P Эти функции доступны, если определено \fB_POSIX_THREAD_SAFE_FUNCTIONS\fP. .SH "СМОТРИТЕ ТАКЖЕ" \fBunlocked_stdio\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .