|  | 
 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(3) or execl system call is made; ORCLOSE
    says to remove the file when it is closed (by everyone who has
    a copy of the file descriptor); and OAPPEND says to open the file
    in append-only mode, so that writes are always appended to the
    end of the file. Open fails if the file does not exist or the
    user does not have permission to
    open it for the requested purpose (see stat(3) 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(3)), 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 associated 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 containing 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 exclusive-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(9p). 
    
    
    Create fails if the path up to the last element of file cannot
    be evaluated, if the user doesn’t have write permission in the
    final directory, if the file already exists and does not permit
    the access defined by omode, of if there there are no free file
    descriptors. In the last case, the file may be created even when
    an error is returned. 
    
    
    Since create may succeed even if the file exists, a special mechanism
    is necessary for those applications that require an atomic create
    operation. 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(9p) 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     
 SEE ALSO    
 DIAGNOSTICS     
 |  |  |  | These functions set errstr. 
 | 
 BUGS     
 |  |  |  | Not all functionality is supported on all systems. 
    
    
    The DMAPPEND bit is not supported on any systems. 
    
    
    The implementation of ORCLOSE is to unlink the file after opening
    it, causing problems in programs that try to access the file by
    name before it is closed. 
    
    
    To avoid name conflicts with the underlying system, open and create
    are preprocessor macros defined as p9open and p9create; see intro(3). 
 | 
 |  |