---
name: "getpass"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/getpass"
---

# getpass(3)

get a password

## NAME

getpass - get a password

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <unistd.h>
```

**\[\[deprecated\]\] char \*getpass(const char \****prompt***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**getpass**():

```
    Since glibc 2.2.2:
        _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
            || /* glibc >= 2.19: */ _DEFAULT_SOURCE
            || /* glibc <= 2.19: */ _BSD_SOURCE
    Before glibc 2.2.2:
        none
```

## DESCRIPTION

This function is obsolete. Do not use it. See NOTES. If you want to read input without terminal echoing enabled, see the description of the *ECHO* flag in [**termios**(3type)](/termios/3type.md).

The **getpass**() function opens */dev/tty* (the controlling terminal of the process), outputs the string *prompt*, turns off echoing, reads one line (the "password"), restores the terminal state and closes */dev/tty* again.

## RETURN VALUE

The function **getpass**() returns a pointer to a static buffer containing (the first **PASS\_MAX** bytes of) the password without the trailing newline, terminated by a null byte ('\\0'). This buffer may be overwritten by a following call. On error, the terminal state is restored, *errno* is set to indicate the error, and NULL is returned.

## ERRORS

- **ENXIO**

  The process does not have a controlling terminal.

## FILES

*/dev/tty*

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **getpass**() | Thread safety | MT-Unsafe term |

## STANDARDS

None.

## HISTORY

Version 7 AT&T UNIX. Present in SUSv2, but marked LEGACY. Removed in POSIX.1-2001.

## NOTES

You should use instead [**readpassphrase**(3bsd)](/readpassphrase/3bsd.md), provided by *libbsd*.

In the GNU C library implementation, if */dev/tty* cannot be opened, the prompt is written to *stderr* and the password is read from *stdin*. There is no limit on the length of the password. Line editing is not disabled.

According to SUSv2, the value of **PASS\_MAX** must be defined in *\<limits.h\>* in case it is smaller than 8, and can in any case be obtained using *sysconf(\_SC\_PASS\_MAX)*. However, POSIX.2 withdraws the constants **PASS\_MAX** and **\_SC\_PASS\_MAX**, and the function **getpass**(). The glibc version accepts **\_SC\_PASS\_MAX** and returns **BUFSIZ** (e.g., 8192).

## BUGS

The calling process should zero the password as soon as possible to avoid leaving the cleartext password visible in the process's address space.

## SEE ALSO

[**crypt**(3)](/crypt/3.md)
