summaryrefslogtreecommitdiffstats
path: root/man3/flockfile.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/flockfile.3')
-rw-r--r--man3/flockfile.388
1 files changed, 88 insertions, 0 deletions
diff --git a/man3/flockfile.3 b/man3/flockfile.3
new file mode 100644
index 000000000..91c503eef
--- /dev/null
+++ b/man3/flockfile.3
@@ -0,0 +1,88 @@
+.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
+.\"
+.\" 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.
+.\"
+.TH LOCKFILE 3 2001-10-18 "" "Linux Programmer's Manual"
+.SH NAME
+flockfile, ftrylockfile, funlockfile \- lock FILE for stdio
+.SH SYNOPSIS
+.nf
+.B #include <stdio.h>
+.sp
+.BI "void flockfile(FILE *" filehandle );
+.br
+.BI "int ftrylockfile(FILE *" filehandle );
+.br
+.BI "void funlockfile(FILE *" filehandle );
+.fi
+.SH DESCRIPTION
+The stdio functions are thread-safe. This is achieved by assigning
+to each FILE object a lockcount and (if the lockcount is nonzero)
+an owning thread.
+For each library call, these functions wait until the FILE object
+is no longer locked by a different thread, then lock it, do the
+requested I/O, and unlock the object again.
+.LP
+(Note: this locking has nothing to do with the file locking done
+by functions like
+.BR flock (2)
+and
+.BR lockf (3).)
+.LP
+All this is invisible to the C-programmer, but there may be two
+reasons to wish for more detailed control. On the one hand, maybe
+a series of I/O actions by one thread belongs together, and should
+not be interrupted by the I/O of some other thread.
+On the other hand, maybe the locking overhead should be avoided
+for greater efficiency.
+.LP
+To this end, a thread can explicitly lock the FILE object,
+then do its series of I/O actions, then unlock. This prevents
+other threads from coming in between. If the reason for doing
+this was to achieve greater efficiency, one does the I/O with
+the non-locking versions of the stdio functions: with
+\fIgetc_unlocked\fP() and \fIputc_unlocked\fP() instead of
+\fIgetc\fP() and \fIputc\fP().
+.LP
+The \fBflockfile()\fP function waits for *\fIfilehandle\fP to be
+no longer locked by a different thread, then makes the
+current thread owner of *\fIfilehandle\fP, and increments
+the lockcount.
+.LP
+The \fBfunlockfile()\fP function decrements the lock count.
+.LP
+The \fBftrylockfile()\fP function is a non-blocking version
+of \fBflockfile()\fP. It does nothing in case some other thread
+owns *\fIfilehandle\fP, and it obtains ownership and increments
+the lockcount otherwise.
+.SH "RETURN VALUE"
+The \fBftrylockfile()\fP function returns zero for success
+(the lock was obtained), and nonzero for failure.
+.SH ERRORS
+None.
+.SH AVAILABILITY
+These functions are available when _POSIX_THREAD_SAFE_FUNCTIONS
+is defined. They are in libc since libc 5.1.1 and in glibc
+since glibc 2.0.
+.SH "CONFORMING TO"
+POSIX.1
+.SH "SEE ALSO"
+.BR unlocked_stdio (3)