topen.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       topen.3 (3964B)
       ---
            1 .TH OPEN 3
            2 .SH NAME
            3 open, create, close \- open a file for reading or writing, create file
            4 .SH SYNOPSIS
            5 .B #include <u.h>
            6 .br
            7 .B #include <libc.h>
            8 .PP
            9 .B
           10 int open(char *file, int omode)
           11 .PP
           12 .B
           13 int create(char *file, int omode, ulong perm)
           14 .PP
           15 .B
           16 int close(int fd)
           17 .SH DESCRIPTION
           18 .I Open
           19 opens the
           20 .I file
           21 for I/O and returns an associated file descriptor.
           22 .I Omode
           23 is one of
           24 .BR OREAD ,
           25 .BR OWRITE ,
           26 .BR ORDWR ,
           27 or
           28 .BR OEXEC ,
           29 asking for permission to read, write, read and write, or execute, respectively.
           30 In addition, there are three values that can be ORed with the
           31 .IR omode :
           32 .B OTRUNC
           33 says to truncate the file
           34 to zero length before opening it;
           35 .B OCEXEC
           36 says to close the file when an
           37 .MR exec (3)
           38 or
           39 .I execl
           40 system call is made;
           41 .B ORCLOSE
           42 says to remove the file when it is closed (by everyone who has a copy of the file descriptor);
           43 and
           44 .B OAPPEND
           45 says to open the file in append-only mode, so that writes
           46 are always appended to the end of the file.
           47 .I Open
           48 fails if the file does not exist or the user does not have
           49 permission to open it for the requested purpose
           50 (see
           51 .MR stat (3)
           52 for a description of permissions).
           53 The user must have write permission on the
           54 .I file
           55 if the
           56 .B OTRUNC
           57 bit is set.
           58 For the
           59 .I open
           60 system call
           61 (unlike the implicit
           62 .I open
           63 in
           64 .MR exec (3) ),
           65 .B OEXEC
           66 is actually identical to
           67 .BR OREAD .
           68 .PP
           69 .I Create
           70 creates a new
           71 .I file
           72 or prepares to rewrite an existing
           73 .IR file ,
           74 opens it according to
           75 .I omode
           76 (as described for
           77 .IR open ),
           78 and returns an associated file descriptor.
           79 If the file is new,
           80 the owner is set to the userid of the creating process group;
           81 the group to that of the containing directory;
           82 the permissions to
           83 .I perm
           84 ANDed with the permissions of the containing directory.
           85 If the file already exists,
           86 it is truncated to 0 length,
           87 and the permissions, owner, and group remain unchanged.
           88 The created file is a directory if the
           89 .B DMDIR
           90 bit is set in
           91 .IR perm ,
           92 an exclusive-use file if the
           93 .B DMEXCL
           94 bit is set, and an append-only file if the
           95 .B DMAPPEND
           96 bit is set.
           97 Exclusive-use files may be open for I/O by only one client at a time,
           98 but the file descriptor may become invalid if no I/O is done
           99 for an extended period; see
          100 .IR open (9p).
          101 .PP
          102 .I Create
          103 fails if the path up to the last element of
          104 .I file
          105 cannot be evaluated, if the user doesn't have write permission
          106 in the final directory, if the file already exists and
          107 does not permit the access defined by
          108 .IR omode ,
          109 of if there there are no free file descriptors.
          110 In the last case, the file may be created even when
          111 an error is returned.
          112 .\" If the file is new and the directory in which it is created is
          113 .\" a union directory (see
          114 .\" .IR intro (3))
          115 .\" then the constituent directory where the file is created
          116 .\" depends on the structure of the union: see
          117 .\" .IR bind (3).
          118 .PP
          119 Since
          120 .I create
          121 may succeed even if the file exists, a special mechanism is necessary
          122 for those applications that require an atomic create operation.
          123 If the
          124 .B OEXCL
          125 .RB ( 0x1000 )
          126 bit is set in the
          127 .I mode
          128 for a
          129 .IR create,
          130 the call succeeds only if the file does not already exist;
          131 see
          132 .IR open (9p)
          133 for details.
          134 .PP
          135 .I Close
          136 closes the file associated with a file descriptor.
          137 Provided the file descriptor is a valid open descriptor,
          138 .I close
          139 is guaranteed to close it; there will be no error.
          140 Files are closed automatically upon termination of a process;
          141 .I close
          142 allows the file descriptor to be reused.
          143 .SH SOURCE
          144 .B \*9/src/lib9
          145 .SH SEE ALSO
          146 .MR intro (3) ,
          147 .MR stat (3)
          148 .SH DIAGNOSTICS
          149 These functions set
          150 .IR errstr .
          151 .SH BUGS
          152 Not all functionality is supported on all systems.
          153 .PP
          154 The
          155 .B DMAPPEND
          156 bit is not supported on any systems.
          157 .PP
          158 The implementation of
          159 .B ORCLOSE
          160 is to unlink the file after opening it, causing problems
          161 in programs that try to access the file by name before it is closed.
          162 .PP
          163 To avoid name conflicts with the underlying system,
          164 .I open
          165 and
          166 .I create
          167 are preprocessor macros defined as
          168 .IR p9open
          169 and
          170 .IR p9create ;
          171 see
          172 .MR intro (3) .