 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			378 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			378 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: open.2,v 1.47 2010/09/22 17:58:09 wiz Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1980, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" 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. Neither the name of the University 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 REGENTS 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 REGENTS 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.
 | |
| .\"
 | |
| .\"     @(#)open.2	8.2 (Berkeley) 11/16/93
 | |
| .\"
 | |
| .Dd September 22, 2010
 | |
| .Dt OPEN 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm open
 | |
| .Nd open or create a file for reading or writing
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In fcntl.h
 | |
| .Ft int
 | |
| .Fn open "const char *path" "int flags" "mode_t mode"
 | |
| .Sh DESCRIPTION
 | |
| The file name specified by
 | |
| .Fa path
 | |
| is opened
 | |
| for reading and/or writing as specified by the
 | |
| argument
 | |
| .Fa flags
 | |
| and the file descriptor returned to the calling process.
 | |
| The
 | |
| .Fa flags
 | |
| are specified by
 | |
| .Em or Ns 'ing
 | |
| the values listed below.
 | |
| Applications must specify exactly one of the first three values
 | |
| (file access methods):
 | |
| .Bl -tag -offset indent -width O_NONBLOCK
 | |
| .It Dv O_RDONLY
 | |
| Open for reading only.
 | |
| .It Dv O_WRONLY
 | |
| Open for writing only.
 | |
| .It Dv O_RDWR
 | |
| Open for reading and writing.
 | |
| .El
 | |
| .Pp
 | |
| Any combination of the following may be used:
 | |
| .Bl -tag -offset indent -width O_NONBLOCK
 | |
| .It Dv O_NONBLOCK
 | |
| Do not block on open or for data to become available.
 | |
| .It Dv O_APPEND
 | |
| Append to the file on each write.
 | |
| .It Dv O_CREAT
 | |
| Create the file if it does not exist, in which case the file is
 | |
| created with mode
 | |
| .Ar mode
 | |
| as described in
 | |
| .Xr chmod 2
 | |
| and modified by the process' umask value (see
 | |
| .Xr umask 2 ) .
 | |
| .It Dv O_TRUNC
 | |
| Truncate size to 0.
 | |
| .It Dv O_EXCL
 | |
| Error if
 | |
| .Dv O_CREAT
 | |
| and the file already exists.
 | |
| .It Dv O_SHLOCK
 | |
| Atomically obtain a shared lock.
 | |
| .It Dv O_EXLOCK
 | |
| Atomically obtain an exclusive lock.
 | |
| .It Dv O_NOFOLLOW
 | |
| If last path element is a symlink, don't follow it.
 | |
| This option is provided for compatibility with other operating
 | |
| systems, but its security value is questionable.
 | |
| .It Dv O_DSYNC
 | |
| If set, write operations will be performed according to synchronized
 | |
| I/O data integrity completion:
 | |
| each write will wait for the file data to be committed to stable
 | |
| storage.
 | |
| .It Dv O_SYNC
 | |
| If set, write operations will be performed according to synchronized
 | |
| I/O file integrity completion:
 | |
| each write will wait for both the file data and file status to be
 | |
| committed to stable storage.
 | |
| .It Dv O_RSYNC
 | |
| If set, read operations will complete at the same level of
 | |
| integrity which is in effect for write operations:
 | |
| if specified together with
 | |
| .Dv O_SYNC ,
 | |
| each read will wait for the file status to be committed to stable
 | |
| storage.
 | |
| .Pp
 | |
| Combining
 | |
| .Dv O_RSYNC
 | |
| with
 | |
| .Dv O_DSYNC
 | |
| only, or specifying it without any other synchronized I/O integrity
 | |
| completion flag set, has no further effect.
 | |
| .It Dv O_ALT_IO
 | |
| Alternate I/O semantics will be used for read and write operations
 | |
| on the file descriptor.
 | |
| Alternate semantics are defined by the underlying layers and will not
 | |
| have any alternate effect in most cases.
 | |
| .It Dv O_NOCTTY
 | |
| If the file is a terminal device, the opened device is not
 | |
| made the controlling terminal for the session.
 | |
| This flag has no effect on
 | |
| .Nx ,
 | |
| since the system defaults to the abovementioned behaviour.
 | |
| The flag is present only for standards conformance.
 | |
| .It Dv O_DIRECT
 | |
| If set on a regular file, data I/O operations will not buffer the data
 | |
| being transferred in the kernel's cache, but rather transfer the data
 | |
| directly between user memory and the underlying device driver if possible.
 | |
| This flag is advisory; the request may be performed in the normal
 | |
| buffered fashion if certain conditions are not met, e.g. if the request
 | |
| is not sufficiently aligned or if the file is mapped.
 | |
| .Pp
 | |
| To meet the alignment requirements for direct I/O, the file offset,
 | |
| the length of the I/O and the address of the buffer in memory must all
 | |
| be multiples of
 | |
| .Dv DEV_BSIZE
 | |
| (512 bytes).
 | |
| If the I/O request is made
 | |
| using an interface that supports scatter/gather via struct iovec, each
 | |
| element of the request must meet the above alignment constraints.
 | |
| .It Dv O_DIRECTORY
 | |
| Fail if the file is not a directory.
 | |
| .El
 | |
| .Pp
 | |
| Opening a file with
 | |
| .Dv O_APPEND
 | |
| set causes each write on the file
 | |
| to be appended to the end.
 | |
| If
 | |
| .Dv O_TRUNC
 | |
| is specified and the
 | |
| file exists, the file is truncated to zero length.
 | |
| .Pp
 | |
| If
 | |
| .Dv O_EXCL
 | |
| is set with
 | |
| .Dv O_CREAT
 | |
| and the file already
 | |
| exists,
 | |
| .Fn open
 | |
| returns an error.
 | |
| This may be used to implement a simple exclusive access locking mechanism.
 | |
| If
 | |
| .Dv O_EXCL
 | |
| is set and the last component of the pathname is
 | |
| a symbolic link,
 | |
| .Fn open
 | |
| will fail even if the symbolic
 | |
| link points to a non-existent name.
 | |
| .Pp
 | |
| If the
 | |
| .Dv O_NONBLOCK
 | |
| flag is specified, do not wait for the device or file to be ready or
 | |
| available.
 | |
| If the
 | |
| .Fn open
 | |
| call would result
 | |
| in the process being blocked for some reason (e.g., waiting for
 | |
| carrier on a dialup line),
 | |
| .Fn open
 | |
| returns immediately.
 | |
| This flag also has the effect of making all subsequent I/O on the open file non-blocking.
 | |
| .Pp
 | |
| When opening a file, a lock with
 | |
| .Xr flock 2
 | |
| semantics can be obtained by setting
 | |
| .Dv O_SHLOCK
 | |
| for a shared lock, or
 | |
| .Dv O_EXLOCK
 | |
| for an exclusive lock.
 | |
| If creating a file with
 | |
| .Dv O_CREAT ,
 | |
| the request for the lock will never fail
 | |
| (provided that the underlying filesystem supports locking).
 | |
| .Pp
 | |
| If
 | |
| .Fn open
 | |
| is successful, the file pointer used to mark the current position within
 | |
| the file is set to the beginning of the file.
 | |
| .Pp
 | |
| When a new file is created it is given the group of the directory
 | |
| which contains it.
 | |
| .Pp
 | |
| The new descriptor is set to remain open across
 | |
| .Xr execve 2
 | |
| system calls; see
 | |
| .Xr close 2
 | |
| and
 | |
| .Xr fcntl 2 .
 | |
| .Pp
 | |
| The system imposes a limit on the number of file descriptors
 | |
| open simultaneously by one process.
 | |
| Calling
 | |
| .Xr getdtablesize 3
 | |
| returns the current system limit.
 | |
| .Sh RETURN VALUES
 | |
| If successful,
 | |
| .Fn open
 | |
| returns a non-negative integer, termed a file descriptor.
 | |
| Otherwise, a value of \-1 is returned and
 | |
| .Va errno
 | |
| is set to indicate the error.
 | |
| .Sh ERRORS
 | |
| The named file is opened unless:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EACCES
 | |
| Search permission is denied for a component of the path prefix,
 | |
| the required permissions (for reading and/or writing)
 | |
| are denied for the given flags, or
 | |
| .Dv O_CREAT
 | |
| is specified,
 | |
| the file does not exist,
 | |
| and the directory in which it is to be created
 | |
| does not permit writing.
 | |
| .It Bq Er EDQUOT
 | |
| .Dv O_CREAT
 | |
| is specified,
 | |
| the file does not exist,
 | |
| and the directory in which the entry for the new file
 | |
| is being placed cannot be extended because the
 | |
| user's quota of disk blocks on the file system
 | |
| containing the directory has been exhausted; or
 | |
| .Dv O_CREAT
 | |
| is specified,
 | |
| the file does not exist,
 | |
| and the user's quota of inodes on the file system on
 | |
| which the file is being created has been exhausted.
 | |
| .It Bq Er EEXIST
 | |
| .Dv O_CREAT
 | |
| and
 | |
| .Dv O_EXCL
 | |
| were specified and the file exists.
 | |
| .It Bq Er EFAULT
 | |
| .Fa path
 | |
| points outside the process's allocated address space.
 | |
| .It Bq Er EFTYPE
 | |
| .Dv O_NOFOLLOW
 | |
| was specified, but the last path component is a symlink.
 | |
| .Em Note :
 | |
| .St -p1003.1-2008
 | |
| specifies returning
 | |
| .Bq Er ELOOP
 | |
| for this case.
 | |
| .It Bq Er EINTR
 | |
| The
 | |
| .Fn open
 | |
| operation was interrupted by a signal.
 | |
| .It Bq Er EIO
 | |
| An I/O error occurred while making the directory entry or
 | |
| allocating the inode for
 | |
| .Dv O_CREAT .
 | |
| .It Bq Er EISDIR
 | |
| The named file is a directory, and the arguments specify
 | |
| it is to be opened for writing.
 | |
| .It Bq Er ELOOP
 | |
| Too many symbolic links were encountered in translating the pathname.
 | |
| .It Bq Er EMFILE
 | |
| The process has already reached its limit for open file descriptors.
 | |
| .It Bq Er ENAMETOOLONG
 | |
| A component of a pathname exceeded
 | |
| .Brq Dv NAME_MAX
 | |
| characters, or an entire path name exceeded
 | |
| .Brq Dv PATH_MAX
 | |
| characters.
 | |
| .It Bq Er ENFILE
 | |
| The system file table is full.
 | |
| .It Bq Er ENOENT
 | |
| .Dv O_CREAT
 | |
| is not set and the named file does not exist, or
 | |
| a component of the path name that must exist does not exist.
 | |
| .It Bq Er ENOSPC
 | |
| .Dv O_CREAT
 | |
| is specified,
 | |
| the file does not exist,
 | |
| and the directory in which the entry for the new file is being placed
 | |
| cannot be extended because there is no space left on the file
 | |
| system containing the directory; or
 | |
| .Dv O_CREAT
 | |
| is specified,
 | |
| the file does not exist,
 | |
| and there are no free inodes on the file system on which the
 | |
| file is being created.
 | |
| .It Bq Er ENOTDIR
 | |
| A component of the path prefix is not a directory; or
 | |
| .Dv O_DIRECTORY
 | |
| is specified and the last path component is not a directory.
 | |
| .It Bq Er ENXIO
 | |
| The named file is a character special or block
 | |
| special file, and the device associated with this special file
 | |
| does not exist, or
 | |
| the named file is a
 | |
| .Tn FIFO ,
 | |
| .Dv O_NONBLOCK
 | |
| and
 | |
| .Dv O_WRONLY
 | |
| is set and no process has the file open for reading.
 | |
| .It Bq Er EOPNOTSUPP
 | |
| .Dv O_SHLOCK
 | |
| or
 | |
| .Dv O_EXLOCK
 | |
| is specified but the underlying filesystem does not support locking; or
 | |
| an attempt was made to open a socket (not currently implemented).
 | |
| .It Bq Er EPERM
 | |
| The file's flags (see
 | |
| .Xr chflags 2 )
 | |
| don't allow the file to be opened.
 | |
| .It Bq Er EROFS
 | |
| The named file resides on a read-only file system,
 | |
| and the file is to be modified.
 | |
| .It Bq Er ETXTBSY
 | |
| The file is a pure procedure (shared text) file that is being
 | |
| executed and the
 | |
| .Fn open
 | |
| call requests write access.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr chmod 2 ,
 | |
| .Xr close 2 ,
 | |
| .Xr dup 2 ,
 | |
| .Xr lseek 2 ,
 | |
| .Xr read 2 ,
 | |
| .Xr umask 2 ,
 | |
| .Xr write 2 ,
 | |
| .Xr getdtablesize 3
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn open
 | |
| function conforms to
 | |
| .St -p1003.1-90 .
 | |
| The
 | |
| .Fa flags
 | |
| values
 | |
| .Dv O_DSYNC ,
 | |
| .Dv O_SYNC
 | |
| and
 | |
| .Dv O_RSYNC
 | |
| are extensions defined in
 | |
| .St -p1003.1b-93 .
 | |
| .Pp
 | |
| The
 | |
| .Dv O_SHLOCK
 | |
| and
 | |
| .Dv O_EXLOCK
 | |
| flags are non-standard extensions and should not be used if portability
 | |
| is of concern.
 | |
| .Sh HISTORY
 | |
| An
 | |
| .Fn open
 | |
| function call appeared in
 | |
| .At v2 .
 |