Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/stdio Add a manual page for flockfile(3) etc.; whil...



details:   https://anonhg.NetBSD.org/src/rev/24ae608ccc99
branches:  trunk
changeset: 542428:24ae608ccc99
user:      kleink <kleink%NetBSD.org@localhost>
date:      Tue Jan 28 20:26:04 2003 +0000

description:
Add a manual page for flockfile(3) etc.; while here, also add *_unlocked()
to stdio(3) overview documentation.  Fixes PR lib/20096 from Jason Thorpe.

diffstat:

 lib/libc/stdio/Makefile.inc |   11 ++-
 lib/libc/stdio/flockfile.3  |  127 ++++++++++++++++++++++++++++++++++++++++++++
 lib/libc/stdio/getc.3       |    5 +-
 lib/libc/stdio/stdio.3      |   42 +++++++++++++-
 4 files changed, 175 insertions(+), 10 deletions(-)

diffs (299 lines):

diff -r 832d846a59bc -r 24ae608ccc99 lib/libc/stdio/Makefile.inc
--- a/lib/libc/stdio/Makefile.inc       Tue Jan 28 18:36:04 2003 +0000
+++ b/lib/libc/stdio/Makefile.inc       Tue Jan 28 20:26:04 2003 +0000
@@ -1,5 +1,5 @@
 #      from: @(#)Makefile.inc  5.7 (Berkeley) 6/27/91
-#      $NetBSD: Makefile.inc,v 1.23 2003/01/18 11:29:50 thorpej Exp $
+#      $NetBSD: Makefile.inc,v 1.24 2003/01/28 20:26:04 kleink Exp $
 
 # stdio sources
 .PATH: ${.CURDIR}/stdio
@@ -26,13 +26,14 @@
 # namespace purity wrappers
 SRCS+= _fseeko.c _ftello.c
 
-MAN+=  fclose.3 ferror.3 fflush.3 fgetln.3 fgets.3 fopen.3 fputs.3 \
-       fread.3 fseek.3 funopen.3 getc.3 mktemp.3 perror.3 printf.3 putc.3 \
-       remove.3 scanf.3 setbuf.3 stdio.3 tmpnam.3 ungetc.3 putwc.3 getwc.3 \
-       ungetwc.3 fwide.3 fparseln.3
+MAN+=  fclose.3 ferror.3 fflush.3 fgetln.3 fgets.3 flockfile.3 fopen.3 \
+       fputs.3 fread.3 fseek.3 funopen.3 getc.3 mktemp.3 perror.3 printf.3 \
+       putc.3 remove.3 scanf.3 setbuf.3 stdio.3 tmpnam.3 ungetc.3 putwc.3 \
+       getwc.3 ungetwc.3 fwide.3 fparseln.3
 
 MLINKS+=ferror.3 clearerr.3 ferror.3 feof.3 ferror.3 fileno.3
 MLINKS+=fflush.3 fpurge.3
+MLINKS+=flockfile.3 ftrylockfile.3 flockfile.3 funlockfile.3
 MLINKS+=fgets.3 gets.3
 MLINKS+=fopen.3 fdopen.3 fopen.3 freopen.3
 MLINKS+=fputs.3 puts.3
diff -r 832d846a59bc -r 24ae608ccc99 lib/libc/stdio/flockfile.3
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/stdio/flockfile.3        Tue Jan 28 20:26:04 2003 +0000
@@ -0,0 +1,127 @@
+.\"    $NetBSD: flockfile.3,v 1.1 2003/01/28 20:26:04 kleink Exp $
+.\"
+.\" Copyright (c) 2003 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Klaus Klein.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"        This product includes software developed by the NetBSD
+.\"        Foundation, Inc. and its contributors.
+.\" 4. Neither the name of The NetBSD Foundation nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd January 28, 2003
+.Dt FLOCKFILE 3
+.Os
+.Sh NAME
+.Nm flockfile ,
+.Nm ftrylockfile ,
+.Nm funlockfile
+.Nd stdio stream locking functions
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.Fd #include \*[Lt]stdio.h\*[Gt]
+.Ft void
+.Fn flockfile "FILE *file"
+.Ft int
+.Fn ftrylockfile "FILE *file"
+.Ft void
+.Fn funlockfile "FILE *file"
+.Sh DESCRIPTION
+The
+.Fn flockfile ,
+.Fn ftrylockfile
+and
+.Fn funlockfile
+functions provide applications with explicit control of locking of
+stdio stream objects.
+They can be used by a thread to execute a sequence of I/O operations
+as a unit, without interference from another thread.
+.Pp
+Locks on stdio streams are recursive, and a lock count is maintained.
+stdio streams are created unlocked, with a lock count of zero.
+After successful acquisition of the lock, its count is incremented
+to one, indicating locked state of the stdio stream.
+Each subsequent relock operation performed by the owner thread
+increments the lock count by one, and each subsequent unlock
+operation performed by the owner thread decrements the lock count by one,
+allowing matching lock and unlock operations to be nested.
+After its lock count is decremented to zero, the stdio stream returns
+to unlocked state, and ownership of the stdio stream is relinquished.
+.Pp
+The
+.Fn flockfile
+function acquires the ownership of
+.Fa file
+for the calling thread.
+If
+.Fa file
+is already owned by another thread, the calling thread is suspended
+until the acquisition is possible (i.e.,
+.Fa file
+is relinquished again and the calling thread is scheduled to acquire it).
+.Pp
+The
+.Fn ftrylockfile
+function acquires the ownership of
+.Fa file
+for the calling thread only if
+.Fa file
+is available.
+.Pp
+The
+.Fn funlockfile
+function relinquishes the ownership of
+.Fa file
+previously granted to the calling thread.
+Only the current owner of
+.Fa file
+may
+.Fn funlockfile
+it.
+.Sh RETURN VALUES
+If successful, the
+.Fn ftrylockfile
+function returns 0.
+Otherwise, it returns non-zero to indicate that the lock cannot be acquired.
+.Sh SEE ALSO
+.Xr getc_unlocked 3 ,
+.Xr getchar_unlocked 3 ,
+.Xr putc_unlocked 3 ,
+.Xr putchar_unlocked 3
+.Sh STANDARDS
+The
+.Fn flockfile ,
+.Fn ftrylockfile
+and
+.Fn funlockfile
+functions conform to
+.St -p1003.1-2001 .
+.Sh BUGS
+The design of these interfaces does not allow for addressing the
+problem of priority inversion.
diff -r 832d846a59bc -r 24ae608ccc99 lib/libc/stdio/getc.3
--- a/lib/libc/stdio/getc.3     Tue Jan 28 18:36:04 2003 +0000
+++ b/lib/libc/stdio/getc.3     Tue Jan 28 20:26:04 2003 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: getc.3,v 1.9 2003/01/18 11:29:55 thorpej Exp $
+.\"    $NetBSD: getc.3,v 1.10 2003/01/28 20:26:04 kleink Exp $
 .\"
 .\" Copyright (c) 1990, 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -136,8 +136,11 @@
 .Xr clearerr 3 .
 .Sh SEE ALSO
 .Xr ferror 3 ,
+.Xr flockfile 3 ,
 .Xr fopen 3 ,
 .Xr fread 3 ,
+.Xr ftrylockfile 3 ,
+.Xr funlockfile 3 ,
 .Xr putc 3 ,
 .Xr ungetc 3
 .Sh STANDARDS
diff -r 832d846a59bc -r 24ae608ccc99 lib/libc/stdio/stdio.3
--- a/lib/libc/stdio/stdio.3    Tue Jan 28 18:36:04 2003 +0000
+++ b/lib/libc/stdio/stdio.3    Tue Jan 28 20:26:04 2003 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: stdio.3,v 1.16 2003/01/18 11:29:58 thorpej Exp $
+.\"    $NetBSD: stdio.3,v 1.17 2003/01/28 20:26:04 kleink Exp $
 .\"
 .\" Copyright (c) 1990, 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -33,7 +33,7 @@
 .\"
 .\"     @(#)stdio.3    8.7 (Berkeley) 4/19/94
 .\"
-.Dd April 19, 1994
+.Dd January 28, 2003
 .Dt STDIO 3
 .Os
 .Sh NAME
@@ -168,6 +168,21 @@
 are to be used, what the compiler declaration for the function
 looks like and which external variables are of interest.
 .Pp
+In multi-threaded applications, operations on streams perform implicit
+locking, except for the
+.Fa getc_unlocked ,
+.Fa getchar_unlocked ,
+.Fa putc_unlocked ,
+and
+.Fa putchar_unlocked
+functions.
+Explicit control of stream locking is available through the
+.Fa flockfile ,
+.Fa ftrylockfile ,
+and
+.Fa funlockfile
+functions .
+.Pp
 The following are defined as macros; these names may not be re-used
 without first removing their current definitions with
 .Dv #undef :
@@ -190,9 +205,13 @@
 .Fn freopen ,
 .Fn fwopen ,
 .Fn getc ,
+.Fn getc_unlocked ,
 .Fn getchar ,
+.Fn getchar_unlocked ,
 .Fn putc ,
+.Fn putc_unlocked ,
 .Fn putchar ,
+.Fn putchar_unlocked ,
 .Dv stderr ,
 .Dv stdin ,
 .Dv stdout .
@@ -202,10 +221,14 @@
 .Fn clearerr ,
 .Fn fileno ,
 .Fn getc ,
+.Fn getc_unlocked ,
 .Fn getchar ,
+.Fn getchar_unlocked ,
 .Fn putc ,
+.Fn putc_unlocked ,
+.Fn putchar ,
 and
-.Fn putchar
+.Fn putchar_unlocked
 exist and will be used if the macros definitions are explicitly removed.
 .Sh SEE ALSO
 .Xr close 2 ,
@@ -218,7 +241,7 @@
 library conforms to
 .St -ansiC .
 .Sh LIST OF FUNCTIONS
-.Bl -column "Description"
+.Bl -column "Functionxxxxxxxx" "Description"
 .Sy Function   Description
 clearerr       check and reset stream status
 fclose close a stream
@@ -232,6 +255,7 @@
 fgets  get a line from a stream
 fgetwc get next wide character from input stream
 fileno check and reset stream status
+flockfile      lock a stream
 fopen  stream open functions
 fprintf        formatted output conversion
 fpurge flush a stream
@@ -245,12 +269,18 @@
 fseek  reposition a stream
 fsetpos        reposition a stream
 ftell  reposition a stream
+ftrylockfile   lock a stream (non-blocking)
+funlockfile    unlock a stream
 funopen        open a stream
 fwide  set/get orientation of a stream
 fwopen open a stream
 fwrite binary stream input/output
 getc   get next character or word from input stream
+getc_unlocked  get next character or word from input stream
+       (no implicit locking)
 getchar        get next character or word from input stream
+getchar_unlocked       get next character or word from input stream
+       (no implicit locking)
 gets   get a line from a stream
 getw   get next character or word from input stream
 getwc  get next wide character from input stream
@@ -260,7 +290,11 @@
 perror system error messages
 printf formatted output conversion
 putc   output a character or word to a stream
+putc_unlocked  output a character or word to a stream
+       (no implicit locking)
 putchar        output a character or word to a stream
+putchar_unlocked       output a character or word to a stream
+       (no implicit locking)
 puts   output a line to a stream
 putw   output a character or word to a stream
 putwc  output a wide character to a stream



Home | Main Index | Thread Index | Old Index