glenda.party
term% ls -F
term% pwd
$home/manuals/9front/2/open
term% cat index.txt
OPEN(2)                       System Calls Manual                      OPEN(2)

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

SYNOPSIS
       #include <u.h>
       #include <libc.h>

       int open(char *file, int omode)

       int create(char *file, int omode, ulong perm)

       int close(int fd)

DESCRIPTION
       Open  opens the file for I/O and returns an associated file descriptor.
       Omode is one of OREAD, OWRITE, ORDWR, or OEXEC, asking  for  permission
       to read, write, read and write, or execute, respectively.  In addition,
       there  are three values that can be ORed with the omode: OTRUNC says to
       truncate the file to zero length before  opening  it;  OCEXEC  says  to
       close  the  file  when an exec(2) or execl system call is made; and OR‐
       CLOSE says to remove the file when it is closed (by everyone who has  a
       copy of the file descriptor).  Open fails if the file does not exist or
       the  user does not have permission to open it for the requested purpose
       (see stat(2) for a description of permissions).   The  user  must  have
       write  permission  on  the file if the OTRUNC bit is set.  For the open
       system call (unlike the implicit open in exec(2)),  OEXEC  is  actually
       identical to OREAD.

       Create  creates  a  new  file  or prepares to rewrite an existing file,
       opens it according to omode (as described for open), and returns an as‐
       sociated file descriptor.  If the file is new, the owner is set to  the
       userid of the creating process group; the group to that of the contain‐
       ing  directory;  the  permissions to perm ANDed with the permissions of
       the containing directory.  If the file already exists, it is  truncated
       to  0  length,  and the permissions, owner, and group remain unchanged.
       The created file is a directory if the DMDIR bit is set in perm, an ex‐
       clusive-use file if the DMEXCL bit is set, and an append-only  file  if
       the  DMAPPEND  bit  is set.  Exclusive-use files may be open for I/O by
       only one client at a time, but the file descriptor may  become  invalid
       if no I/O is done for an extended period; see open(5).

       Create fails if the path up to the last element of file cannot be eval‐
       uated,  if  the  user doesn't have write permission in the final direc‐
       tory, if the file already exists and does not permit the access defined
       by omode, of if there are no free file descriptors.  In the last  case,
       the file may be created even when an error is returned.  If the file is
       new  and the directory in which it is created is a union directory (see
       intro(2)) then the constituent directory where the file is created  de‐
       pends on the structure of the union: see bind(2).

       Since  create  may succeed even if the file exists, a special mechanism
       is necessary for those applications that require an atomic create oper‐
       ation.  If the OEXCL (0x1000) bit is set in the mode for a create,  the
       call  succeeds only if the file does not already exist; see open(5) for
       details.

       Close closes the file associated with a file descriptor.  Provided  the
       file  descriptor  is  a  valid  open descriptor, close is guaranteed to
       close it; there will be no error.  Files are closed automatically  upon
       termination  of  a  process;  close  allows  the  file descriptor to be
       reused.

SOURCE
       /sys/src/libc/9syscall

SEE ALSO
       intro(2), bind(2), stat(2)

DIAGNOSTICS
       These functions set errstr.

                                                                       OPEN(2)