topen.3 - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
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 
     6 .br
     7 .B #include 
     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) .