Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
OPEN(2)			  FreeBSD System Calls Manual		       OPEN(2)

NAME
     open, openat -- open or create a file for reading or writing

SYNOPSIS
     #include <fcntl.h>

     int
     open(const	char *path, int	flags, ...);

     int
     openat(int	fd, const char *path, int flags, ...);

DESCRIPTION
     The file name specified by	path is	opened for reading and/or writing as
     specified by the argument flags and the file descriptor returned to the
     calling process.  The flags argument may indicate the file	is to be cre-
     ated if it	does not exist (by specifying the O_CREAT flag), in which case
     the file is created with a	mode specified by an additional	argument of
     type mode_t as described in chmod(2) and modified by the process' umask
     value (see	umask(2)).

     The flags specified are a bitwise OR of the following values.  Exactly
     one of the	first three values (file access	modes) must be specified:

	   O_RDONLY	Open for reading only.
	   O_WRONLY	Open for writing only.
	   O_RDWR	Open for reading and writing.

     Any combination of	the following flags may	additionally be	used:

	   O_NONBLOCK	Do not block on	open or	for data to become available.
	   O_APPEND	Append on each write.
	   O_CREAT	Create file if it does not exist.  An additional argu-
			ment of	type mode_t must be supplied to	the call.
	   O_TRUNC	Truncate size to 0.
	   O_EXCL	Error if O_CREAT is set	and file exists.
	   O_SYNC	Perform	synchronous I/O	operations.
	   O_SHLOCK	Atomically obtain a shared lock.
	   O_EXLOCK	Atomically obtain an exclusive lock.
	   O_NOFOLLOW	If last	path element is	a symlink, don't follow	it.
	   O_CLOEXEC	Set FD_CLOEXEC (the close-on-exec flag)	on the new
			file descriptor.
	   O_DIRECTORY	Error if path does not name a directory.

     Opening a file with O_APPEND set causes each write	on the file to be ap-
     pended to the end.	 If O_TRUNC and	a writing mode are specified and the
     file exists, the file is truncated	to zero	length.	 If O_EXCL is set with
     O_CREAT and the file already exists, open() returns an error.  This may
     be	used to	implement a simple exclusive access locking mechanism.	If ei-
     ther of O_EXCL or O_NOFOLLOW are set and the last component of the	path-
     name is a symbolic	link, open() will fail even if the symbolic link
     points to a non-existent name.  If	the O_NONBLOCK flag is specified, do
     not wait for the device or	file to	be ready or available.	If the open()
     call would	result in the process being blocked for	some reason (e.g.,
     waiting for carrier on a dialup line), open() returns immediately.	 This
     flag also has the effect of making	all subsequent I/O on the open file
     non-blocking.  If the O_SYNC flag is set, all I/O operations on the file
     will be done synchronously.

     A FIFO should either be opened with O_RDONLY or with O_WRONLY.  The be-
     havior for	opening	a FIFO with O_RDWR is undefined.

     When opening a file, a lock with flock(2) semantics can be	obtained by
     setting O_SHLOCK for a shared lock, or O_EXLOCK for an exclusive lock.
     If	creating a file	with O_CREAT, the request for the lock will never fail
     (provided that the	underlying filesystem supports locking).

     If	open() is successful, the file pointer used to mark the	current	posi-
     tion within the file is set to the	beginning of the file.

     When a new	file is	created	it is given the	group of the directory which
     contains it.

     The new descriptor	is set to remain open across execve(2) system calls;
     see close(2) and fcntl(2).

     The system	imposes	a limit	on the number of file descriptors open simul-
     taneously by one process.	getdtablesize(3) returns the current system
     limit.

     The openat() function is equivalent to open() except that where path
     specifies a relative path,	the file to be opened is determined relative
     to	the directory associated with file descriptor fd instead of the	cur-
     rent working directory.

     If	openat() is passed the special value AT_FDCWD (defined in <fcntl.h>)
     in	the fd parameter, the current working directory	is used	and the	behav-
     ior is identical to a call	to open().

RETURN VALUES
     If	successful, open() returns a non-negative integer, termed a file de-
     scriptor.	Otherwise, a value of -1 is returned and errno is set to indi-
     cate the error.

ERRORS
     The open()	and openat() functions will fail if:

     [ENOTDIR]		A component of the path	prefix is not a	directory.

     [ENOTDIR]		O_DIRECTORY is specified and path does not name	a di-
			rectory.

     [ENAMETOOLONG]	A component of a pathname exceeded NAME_MAX charac-
			ters, or an entire pathname (including the terminating
			NUL) exceeded PATH_MAX bytes.

     [ENOENT]		O_CREAT	is not set and the named file does not exist.

     [ENOENT]		A component of the pathname that must exist does not
			exist.

     [EACCES]		Search permission is denied for	a component of the
			path prefix.

     [EACCES]		The required permissions (for reading and/or writing)
			are denied for the given flags.

     [EACCES]		O_CREAT	is specified, the file does not	exist, and the
			directory in which it is to be created does not	permit
			writing.

     [ELOOP]		Too many symbolic links	were encountered in translat-
			ing the	pathname, or the O_NOFOLLOW flag was specified
			and the	target is a symbolic link.

     [EISDIR]		The named file is a directory, and the arguments spec-
			ify it is to be	opened for writing.

     [EINVAL]		The flags specified for	opening	the file are not
			valid.

     [EROFS]		The named file resides on a read-only file system, and
			the file is to be modified.

     [EMFILE]		The process has	already	reached	its limit for open
			file descriptors.

     [ENFILE]		The system file	table is full.

     [ENXIO]		The named file is a character special or block special
			file, and the device associated	with this special file
			does not exist.

     [ENXIO]		The named file is a FIFO, the O_NONBLOCK and O_WRONLY
			flags are set, and no process has the file open	for
			reading.

     [EINTR]		The open() operation was interrupted by	a signal.

     [EOPNOTSUPP]	O_SHLOCK or O_EXLOCK is	specified but the underlying
			filesystem does	not support locking.

     [EWOULDBLOCK]	O_NONBLOCK and one of O_SHLOCK or O_EXLOCK is speci-
			fied and the file is already locked.

     [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.

     [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.

     [EDQUOT]		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 direc-
			tory has been exhausted.

     [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.

     [EIO]		An I/O error occurred while making the directory entry
			or allocating the inode	for O_CREAT.

     [ETXTBSY]		The file is a pure procedure (shared text) file	that
			is being executed and the open() call requests write
			access.

     [EFAULT]		path points outside the	process's allocated address
			space.

     [EEXIST]		O_CREAT	and O_EXCL were	specified and the file exists.

     [EPERM]		The file named by path is flagged append-only but
			O_APPEND was not specified in flags.

     [EOPNOTSUPP]	An attempt was made to open a socket (not currently
			implemented).

     [EBUSY]		An attempt was made to open a terminal device that re-
			quires exclusive access	and the	specified device has
			already	be opened.

     Additionally, the openat()	function will fail if:

     [EBADF]		The path argument specifies a relative path and	the fd
			argument is neither AT_FDCWD nor a valid file descrip-
			tor.

     [ENOTDIR]		The path argument specifies a relative path and	the fd
			argument is a valid file descriptor but	it does	not
			reference a directory.

     [EACCES]		The path argument specifies a relative path but	search
			permission is denied for the directory which the fd
			file descriptor	references.

SEE ALSO
     chflags(2), chmod(2), close(2), dup(2), flock(2), lseek(2), read(2),
     umask(2), write(2), getdtablesize(3)

STANDARDS
     The open()	and openat() functions conform to IEEE Std 1003.1-2008
     ("POSIX.1").

     POSIX specifies three different flavors for synchronous I/O: O_SYNC,
     O_DSYNC, and O_RSYNC.  In OpenBSD,	these are all equivalent.

     The O_SHLOCK and O_EXLOCK flags are non-standard extensions and should
     not be used if portability	is of concern.

HISTORY
     An	open() system call first appeared in Version 1 AT&T UNIX.  The flags
     argument has been supported since 4.2BSD.	Before that, a dedicated
     creat() system call had to	be used	to create new files; it	appeared in
     Version 1 AT&T UNIX, was deprecated in 4.3BSD-Reno, and removed in
     OpenBSD 5.0.

     The openat() system call has been available since OpenBSD 5.0.

CAVEATS
     The O_TRUNC flag requires that one	of O_RDWR or O_WRONLY also be speci-
     fied, else	EINVAL is returned.

FreeBSD	13.0			January	3, 2021			  FreeBSD 13.0

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | STANDARDS | HISTORY | CAVEATS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=open&sektion=2&manpath=OpenBSD+6.9>

home | help