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)