 ca9280e097
			
		
	
	
		ca9280e097
		
	
	
	
	
		
			
			- Make open(2) more POSIX compliant - Add a test case for dangling symlinks and open() syscall with O_CREAT and O_EXCL on a symlink. - Update open(2) man page to reflect change.
		
			
				
	
	
		
			190 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" Copyright (c) 1980 Regents of the University of California.
 | |
| .\" All rights reserved.  The Berkeley software License Agreement
 | |
| .\" specifies the terms and conditions for redistribution.
 | |
| .\"
 | |
| .\"	@(#)open.2	6.4 (Berkeley) 5/14/86
 | |
| .\"
 | |
| .TH OPEN 2 "May 14, 1986"
 | |
| .UC 4
 | |
| .SH NAME
 | |
| open \- open a file for reading or writing, or create a new file
 | |
| .SH SYNOPSIS
 | |
| .nf
 | |
| .ft B
 | |
| #include <sys/types.h>
 | |
| #include <fcntl.h>
 | |
| 
 | |
| int open(const char *\fIpath\fP, int \fIflags\fP \fR[\fP, mode_t \fImode\fP\fR]\fP)
 | |
| .ft R
 | |
| .fi
 | |
| .SH DESCRIPTION
 | |
| .B Open
 | |
| opens the file
 | |
| .I path
 | |
| for reading and/or writing, as specified by the
 | |
| .I flags
 | |
| argument and returns a descriptor for that file.
 | |
| The
 | |
| .I flags
 | |
| argument may indicate the file is to be
 | |
| created if it does not already exist (by specifying the
 | |
| O_CREAT flag), in which case the file is created with mode
 | |
| .I mode
 | |
| as described in
 | |
| .BR chmod (2)
 | |
| and modified by the process' umask value (see
 | |
| .BR umask (2)).
 | |
| .PP
 | |
| .I Path
 | |
| is the address of a string of ASCII characters representing
 | |
| a path name, terminated by a null character.
 | |
| The flags specified are formed by
 | |
| .IR or 'ing
 | |
| the following values
 | |
| .PP
 | |
| .RS
 | |
| .ta +12n
 | |
| .nf
 | |
| O_RDONLY	open for reading only
 | |
| O_WRONLY	open for writing only
 | |
| O_RDWR	open for reading and writing
 | |
| O_NONBLOCK	do not block on open
 | |
| O_APPEND	append on each write
 | |
| O_CREAT	create file if it does not exist
 | |
| O_TRUNC	truncate size to 0
 | |
| O_EXCL	error if create and file exists
 | |
| .fi
 | |
| .DT
 | |
| .RE
 | |
| .PP
 | |
| Opening a file with O_APPEND set causes each write on the file
 | |
| to be appended to the end.  If O_TRUNC is specified and the
 | |
| file exists, the file is truncated to zero length.
 | |
| If O_EXCL is set with O_CREAT, then if the file already
 | |
| exists, the open returns an error.  This can be used to
 | |
| implement a simple exclusive access locking mechanism.
 | |
| If O_EXCL is set and the last component of the pathname is
 | |
| a symbolic link, the open will fail even if the symbolic
 | |
| link points to a non-existent name.
 | |
| If the O_NONBLOCK flag is specified and the open call would result
 | |
| in the process being blocked for some reason, the open returns immediately. 
 | |
| .PP
 | |
| Upon successful completion a non-negative integer termed a
 | |
| file descriptor is returned.
 | |
| The file pointer used to mark the current position within the
 | |
| file is set to the beginning of the file.
 | |
| .PP
 | |
| The new descriptor is set to remain open across
 | |
| .BR execve
 | |
| system calls; see
 | |
| .BR close (2).
 | |
| .PP
 | |
| The system imposes a limit on the number of descriptors
 | |
| open simultaneously by one process.
 | |
| .SH "ERRORS
 | |
| The named file is opened unless one or more of the
 | |
| following are true:
 | |
| .TP 15
 | |
| [ENOTDIR]
 | |
| A component of the path prefix is not a directory.
 | |
| .TP 15
 | |
| [ENAMETOOLONG]
 | |
| The path name exceeds PATH_MAX characters.
 | |
| .TP 15
 | |
| [ENOENT]
 | |
| O_CREAT is not set and the named file does not exist.
 | |
| .TP 15
 | |
| [ENOENT]
 | |
| A component of the path name that must exist does not exist.
 | |
| .TP 15
 | |
| [EACCES]
 | |
| Search permission is denied for a component of the path prefix.
 | |
| .TP 15
 | |
| [EACCES]
 | |
| The required permissions (for reading and/or writing)
 | |
| are denied for the named file.
 | |
| .TP 15
 | |
| [EACCES]
 | |
| O_CREAT is specified,
 | |
| the file does not exist,
 | |
| and the directory in which it is to be created
 | |
| does not permit writing.
 | |
| .TP 15
 | |
| [EACCES]
 | |
| A device to be opened for writing is physically write protected.
 | |
| .TP 15
 | |
| [ELOOP]
 | |
| Too many symbolic links were encountered in translating the pathname.
 | |
| (Minix-vmd)
 | |
| .TP 15
 | |
| [EISDIR]
 | |
| The named file is a directory, and the arguments specify
 | |
| it is to be opened for writing.
 | |
| .TP 15
 | |
| [EROFS]
 | |
| The named file resides on a read-only file system,
 | |
| and the file is to be modified.
 | |
| .TP 15
 | |
| [EMFILE]
 | |
| The system limit for open file descriptors per process has already been reached.
 | |
| .TP 15
 | |
| [ENFILE]
 | |
| The system file table is full.
 | |
| .TP 15
 | |
| [ENXIO]
 | |
| The named file is a character special or block
 | |
| special file, and the device associated with this special file
 | |
| does not exist.
 | |
| .TP 15
 | |
| [ENOSPC]
 | |
| 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.
 | |
| .TP 15
 | |
| [ENOSPC]
 | |
| 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.
 | |
| .ig
 | |
| .TP 15
 | |
| [EDQUOT]
 | |
| O_CREAT is specified,
 | |
| the file does not exist,
 | |
| and the directory in which the entry for the new fie
 | |
| is being placed cannot be extended because the
 | |
| user's quota of disk blocks on the file system
 | |
| containing the directory has been exhausted.
 | |
| .TP 15
 | |
| [EDQUOT]
 | |
| 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.
 | |
| ..
 | |
| .TP 15
 | |
| [EIO]
 | |
| An I/O error occurred while making the directory entry or
 | |
| allocating the inode for O_CREAT.
 | |
| .TP 15
 | |
| [EFAULT]
 | |
| .I Path
 | |
| points outside the process's allocated address space.
 | |
| .TP 15
 | |
| [EEXIST]
 | |
| O_CREAT and O_EXCL were specified and the file exists or
 | |
| .I
 | |
| path
 | |
| names a symbolic link (regardless of contents of the link).
 | |
| .SH "SEE ALSO"
 | |
| .BR chmod (2),
 | |
| .BR close (2),
 | |
| .BR dup (2),
 | |
| .BR fcntl (2),
 | |
| .BR lseek (2),
 | |
| .BR read (2),
 | |
| .BR write (2),
 | |
| .BR umask (2).
 |