POSIX_OPENPT(3)

POSIX_OPENPT(3) | Library Functions Manual | POSIX_OPENPT(3)

# NAME

`posix_openpt` — open a pseudo-terminal device

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <stdlib.h>`
`#include <fcntl.h>`

int
`posix_openpt`(int oflag);

# DESCRIPTION

The `posix_openpt`() function searches for an unused master pseudo-terminal device, opens it, and returns a file descriptor associated with the now used pseudo-terminal device. The oflag argument has the same meaning as in the open(2) call.

# RETURN VALUES

If successful, `posix_openpt`() returns a non-negative integer, which corresponds to a file descriptor pointing to the master pseudo-terminal device. Otherwise, a value of -1 is returned and errno is set to indicate the error.

Note that unlike implementations on some other operating systems, `posix_openpt`() does not return `EINVAL` if a flag supplied in oflag would be deemed invalid, instead it is simply ignored. This means it is not possible to dynamically test which open(2) flags are possible to set, and apply a fallback if `EINVAL` is received. However, this is unlikely to be a concern in practice, as flags such as `O_NONBLOCK`, `O_CLOEXEC`, and `O_CLOFORK` are supported.

# SEE ALSO

ioctl(2), open(2), grantpt(3), ptsname(3), unlockpt(3)

# RATIONALE

The standards committee did not want to directly expose the cloning device, thus decided to wrap the functionality in this function. The equivalent code would be:

    	int
    	posix_openpt(int oflag) {
    		return open("/dev/ptmx", oflag);
    	}

# STANDARDS

The `posix_openpt`() function conforms to IEEE Std 1003.1-2001 (“POSIX.1”).

# HISTORY

This function first appeared in NetBSD 3. Support for non-standard flags appeared in NetBSD 10.

August 6, 2025 | NetBSD 11.0