---
name: "fd"
section: "4"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/fd/4"
---

# fd(4)

file descriptor files

## NAME

**fd**, **stdin**, **stdout**, **stderr** – file descriptor files

## DESCRIPTION

The files */dev/fd/0* through */dev/fd/#* refer to file descriptors which can be accessed through the file system. If the file descriptor is open and the mode the file is being opened with is a subset of the mode of the existing descriptor, the call:

```
fd = open("/dev/fd/0", mode);
```

and the call:

```
fd = fcntl(0, F_DUPFD, 0);
```

are equivalent.

Opening the files */dev/stdin*, */dev/stdout*, and */dev/stderr* is equivalent to the following calls:

```
fd = fcntl(STDIN_FILENO,  F_DUPFD, 0);
fd = fcntl(STDOUT_FILENO, F_DUPFD, 0);
fd = fcntl(STDERR_FILENO, F_DUPFD, 0);
```

Flags to the [open(2)](/open/2.md) call other than O\_RDONLY, O\_WRONLY, and O\_RDWR are ignored.

These devices may not be opened by processes which are tainted as a result of setuid or setgid behaviours, as documented in [issetugid(2)](/issetugid/2.md). In those cases, an error return will occur with *errno* set to EPERM.

## FILES

- */dev/fd/#*

  - */dev/stdin*

  - */dev/stdout*

  - */dev/stderr*

  ## SEE ALSO

[tty(4)](/tty/4.md)
