summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/filedesc.9
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 15:32:58 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 15:32:58 -0400
commit5cb84ec742fd33f78c8022863fadaa8d0d93e176 (patch)
tree1a81ca3665e6153923e40db7b0d988f8573ab59c /static/netbsd/man9/filedesc.9
parenta59214f344567c037d5776879bcfc5fcc1d4d5f6 (diff)
feat: Added NetBSD man pages
Diffstat (limited to 'static/netbsd/man9/filedesc.9')
-rw-r--r--static/netbsd/man9/filedesc.9250
1 files changed, 250 insertions, 0 deletions
diff --git a/static/netbsd/man9/filedesc.9 b/static/netbsd/man9/filedesc.9
new file mode 100644
index 00000000..26a02e02
--- /dev/null
+++ b/static/netbsd/man9/filedesc.9
@@ -0,0 +1,250 @@
+.\" $NetBSD: filedesc.9,v 1.18 2019/04/08 13:30:46 wiz Exp $
+.\"
+.\" Copyright (c) 2002, 2005, 2006 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Gregory McGarry.
+.\"
+.\" 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.
+.\"
+.\" 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 April 8, 2019
+.Dt FILEDESC 9
+.Os
+.Sh NAME
+.Nm filedesc ,
+.Nm fd_alloc ,
+.Nm fd_checkstd ,
+.Nm fd_clone ,
+.Nm fd_closeexec ,
+.Nm fd_copy ,
+.Nm fd_dup ,
+.Nm fd_dup2 ,
+.Nm fd_dupopen ,
+.Nm fd_free ,
+.Nm fd_init ,
+.Nm fd_getfile ,
+.Nm fd_share ,
+.Nm fd_tryexpand
+.Nd file descriptor tables and operations
+.Sh SYNOPSIS
+.In sys/file.h
+.In sys/filedesc.h
+.Ft int
+.Fn fd_alloc "proc_t *p" "int want" "int *result"
+.Ft int
+.Fn fd_checkstd "void"
+.Ft int
+.Fn fd_clone "file_t *fp" "int fd" "int flag" "const struct fileops *fops" "void *data"
+.Ft filedesc_t *
+.Fn fd_copy "void"
+.Ft void
+.Fn fd_closeexec "void"
+.Ft int
+.Fn fd_dup "file_t *fp" "int minfd" "int *newp" "bool exclose"
+.Ft int
+.Fn fd_dup2 "file_t *fp" "unsigned newfd" "int flags"
+.Ft int
+.Fn fd_dupopen "int old" "int *newp" "int error"
+.Ft void
+.Fn fd_free "void"
+.Ft filedesc_t *
+.Fn fd_init "filedesc_t *fdp"
+.Ft file_t *
+.Fn fd_getfile "unsigned fd"
+.Ft void
+.Fn fd_share "proc_t *p"
+.Ft void
+.Fn fd_tryexpand "proc_t *p"
+.Sh DESCRIPTION
+For user processes, all I/O is done through file descriptors.
+These file descriptors represent underlying objects supported by the kernel
+and are created by system calls specific to the type of object.
+In
+.Nx ,
+six types of objects can be represented by file descriptors: data
+files, pipes, sockets, event queues, crypto, and miscellaneous.
+.Pp
+The kernel maintains a descriptor table for each process which is used
+to translate the external representation of a file descriptor into an
+internal representation.
+The file descriptor is merely an index into this table.
+The table maintains the following information:
+.Pp
+.Bl -bullet -compact
+.It
+the number of descriptors allocated in the file descriptor table;
+.It
+approximate next free descriptor;
+.It
+a reference count on the file descriptor table; and
+.It
+an array of open file entries.
+.El
+.Pp
+On creation of the file descriptor table, a fixed number of file
+entries are created.
+It is the responsibility of the file descriptor operations to expand the
+available number of entries if more are required.
+Each file entry in the descriptor table contains the information needed
+to access the underlying object and to maintain common information.
+See
+.Xr file 9
+for details of operations on the file entries.
+.Pp
+New file descriptors are generally allocated by
+.Fn fd_alloc
+and freed by
+.Fn fd_free .
+File entries are extracted from the file descriptor table by
+.Fn fd_getfile .
+Most of the remaining functions in the interface are purpose-specific
+and perform lower-level file descriptor operations.
+.Sh FUNCTIONS
+The following functions are high-level interface routines to access
+the file descriptor table for a process and its file entries.
+.Bl -tag -width compact
+.It Fn fd_alloc "p" "want" "*result"
+Create a new open file entry in the file descriptor table and
+allocate a file descriptor for the process
+.Fa p .
+The credential on the file entry are inherited from process
+.Fa p .
+Calling the
+.Fn fd_alloc
+function expands the file descriptor table when necessary.
+.Pp
+The index of the file entry is returned in
+.Fa *result .
+The
+.Fn fd_alloc
+function returns zero on success, or an appropriate error value
+otherwise.
+.It Fn fd_getfile "fd"
+Get the file entry for file descriptor .
+.Fa fd
+The file entry is returned if it is valid and usable, otherwise
+.Dv NULL
+is returned.
+.It Fn fd_dup "fp" "minfd" "*newp" "exclose"
+Duplicate file descriptor
+.Fa fp
+for the current process.
+The fd picked will be at least
+.Fa minfd .
+The resulting descriptor is given in
+.Fa newp .
+.It Fn fd_dup2 "fp" "newfd" "flags"
+Duplicate file descriptor
+.Fa fp
+in fd number
+.Fa newfd .
+If newfd is already in use by an open file, close it (See
+.Xr dup2 2 ) .
+.It Fn fd_dupopen "old" "*newp" "error"
+Duplicate file descriptor specified in
+.Fa old
+for the current lwp.
+.El
+.Pp
+The following functions operate on the file descriptor table for a
+process.
+.Bl -tag -width compact
+.It Fn fd_alloc "p" "want" "*result"
+Allocate a file descriptor
+.Fa want
+for process
+.Fa p .
+The resultant file descriptor is returned in
+.Fa *result .
+The
+.Fn fd_alloc
+function returns zero on success, otherwise an appropriate error is
+returned.
+.It Fn fd_clone "fp" "fd" "flag" "fops" "data"
+This function is meant to be used by devices which allocate a file
+entry upon open.
+.Fn fd_clone
+fills
+.Fa fp
+with the given parameters.
+It always returns the in-kernel errno
+.Er EMOVEFD .
+This special return value is interpreted by the caller of the device
+open routine.
+.It Fn fd_closeexec "void"
+Close any files for the current process
+that are marked
+.Dq close on exec .
+This operation is performed by invoking
+.Fn fd_close
+on the appropriate file descriptor.
+.It Fn fd_copy "void"
+Copy the file descriptor table from the current process
+and return a pointer to the copy.
+The returned file descriptor is guaranteed to have a reference count of one.
+All file descriptor state is maintained.
+The reference counts on each file entry referenced by the file
+descriptor table is incremented accordingly.
+.It Fn fd_tryexpand "p"
+Expand the file descriptor table for process
+.Fa p
+by allocating memory for additional file descriptors.
+.It Fn fd_free "void"
+Decrement the reference count on the file descriptor table for the current lwp
+and release the file descriptor table if the reference count drops to
+zero.
+.It Fn fd_share "p"
+Make process
+.Fa p
+share the current process's filedesc structure.
+.It Fn fd_checkstd "l"
+Check the standard file descriptors 0, 1, and 2 and ensure they are
+referencing valid file descriptors.
+If they are not, create references to
+.Pa /dev/null .
+This is done to setuid/setgid executables, as file descriptors 0, 1, 2
+are implicitly used by the Standard C Library.
+.It Fn fd_init "fdp"
+Create a file descriptor table using the same current and root
+directories of the current process.
+The returned file descriptor table is guaranteed to have a reference
+count of one.
+.El
+.Sh RETURN VALUES
+Successful operations return zero.
+A failed operation will return a non-zero value.
+Possible values include:
+.Bl -tag -width Er
+.It Bq Er EBADF
+Bad file descriptor specified.
+.It Bq Er EMFILE
+Cannot exceed file descriptor limit.
+.It Bq Er ENOSPC
+No space left in file descriptor table.
+.El
+.Sh CODE REFERENCES
+The framework for file descriptor handling is implemented within the
+file
+.Pa sys/kern/kern_descrip.c .
+.Sh SEE ALSO
+.Xr file 9