---
name: "stdin"
section: "4"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/fd/4"
---

# stdin(4)

file descriptor files

Part of [fd(4)](/fd/4.md).

## 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.

## IMPLEMENTATION NOTES

By default, */dev/fd* is provided by [devfs(4)](/devfs/4.md), which provides nodes for the first three file descriptors. Some sites may require nodes for additional file descriptors; these can be made available by mounting [fdescfs(4)](/fdescfs/4.md) on */dev/fd*.

## FILES

- */dev/fd/#*

  - */dev/stdin*

  - */dev/stdout*

  - */dev/stderr*

  ## SEE ALSO

[devfs(4)](/devfs/4.md), [fdescfs(4)](/fdescfs/4.md), [tty(4)](/tty/4.md)
