OPEN(3)
π OPEN(3) β library functions manual: open, create, close π
β¨ 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 πΈ
Okay so bestie, here's the tea. 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. Iconic.
In addition, there are values you can OR with omode. The manpage says βthree valuesβ and then immediately lists four β a whole mood, not me fixing it β so here they all are, no cap:
OTRUNCβ truncate the file to zero length before opening it.OCEXECβ close the file when anexec(3)orexeclsystem call is made.ORCLOSEβ remove the file when it is closed, by everyone who has a copy of the file descriptor.OAPPENDβ 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, or if there are no free file descriptors. In the last case, the file may be created even when an error is returned. Awkward but true.
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. Reuse era.
π SOURCE π
/src/lib9
π₯ SEE ALSO π₯
π DIAGNOSTICS π
These functions set errstr.
π BUGS π
- Not all functionality is supported on all systems.
- The
DMAPPENDbit is not supported on any systems.
Big yikes: 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).
xoxo, your OPEN(3) bestie π β source: /src/lib9, and the footer didn't give a date, so no date tea today π«Ά
π¦ where this page comes from
- alpine 3.24: plan9port-doc 0_git20260208-r0 Β· LPL-1.02
- arch rolling: plan9port 20261021-2 Β· custom
- nixos 26.05: plan9port 0-unstable-2025-11-10
- nixos 26.05: plan9port-wayland 0-unstable-2025-11-26
- nixpkgs unstable: plan9port 0-unstable-2025-11-10
- nixpkgs unstable: plan9port-wayland 0-unstable-2025-11-26
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms