June 25, 2008 TTYNAME 3

### NAME

ttyname, ttyname_r, isatty, ttyslot - get name of associated terminal (tty) from file descriptor

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```char``*` ttyname(```int fd`)
```int` ttyname_r(```int fd``, char *buf``, size_t len`)
```int` isatty(```int fd`)
```int` ttyslot(``)

### DESCRIPTION

These functions operate on the system file descriptors for terminal type devices. These descriptors are not related to the standard I/O ```FILE` typedef, but refer to the special device files found in ```/dev` and named ```/dev/tty`xx and for which an entry exists in the initialization file ```/etc/ttys` (see ttys(5)), or for pseudo-terminal devices created in ptyfs and named ```/dev/pts/`n.

The isatty(``) function determines if the file descriptor ```fd` refers to a valid terminal type device.

The ttyname(``) function gets the related device name of a file descriptor for which isatty(``) is true. The ttyname_r(``) is the reentrant version of the above, and it places the results in ```buf`. If there is not enough space to place the results (indicated by ```len`), then it returns an error.

The ttyslot(``) function fetches the current process' control terminal number from the ttys(5) file entry. If the terminal is a pseudo-terminal, and there is no special entry in the ttys(5) file for it, the slot number returned is 1 + (last slot number) + minor(tty). This will return a consistent and unique number for each pseudo-terminal device without requiring one to enumerate all of them in ttys(5).

### IMPLEMENTATION NOTES

As an optimisation, these functions attempt to obtain information about all devices from the ```/var/run/dev.db` database, if it exists. If the database exists but is out of date, then these functions may produce incorrect results. The database should be updated using the dev_mkdb(8) command.

### RETURN VALUES

The ttyname(``) function returns the NUL-terminated name if the device is found and isatty(``) is true; otherwise a ```NULL` pointer is returned and errno is set to indicate the error.

The ttyname_r(``) functions returns 0 on success and an error code on failure.

The isatty(``) function returns 1 if ```fd` is associated with a terminal device; otherwise it returns 0 and errno is set to indicate the error.

The ttyslot(``) function returns the unit number of the device file if found; otherwise the value zero is returned.

### FILES

```/dev/*`
```/etc/ttys`

### ERRORS

The ttyname(``), ttyname_r(``), and isatty(``) functions will fail if:

[```EBADF`]
  The ```fd` argument is not a valid file descriptor.

[```ENOTTY`]
  The ```fd` argument does not refer to a terminal device.

The ttyname_r(``) function will also fail if:

[```ERANGE`]
  The buffer provided is not large enough to fit the result.

[```ENOENT`]
  The terminal device is not found. This can happen if the device node has been removed after it was opened.

### SEE ALSO

ioctl(2), ttys(5), dev_mkdb(8)

### STANDARDS

The ttyname(``) and isatty(``) functions conform to ISO/IEC 9945-1:1990 (``POSIX.1'') .

### HISTORY

isatty(``), ttyname(``), and ttyslot(``) functions appeared in Version 7 `AT&T UNIX`.

### BUGS

The ttyname(``) function leaves its result in an internal static object and returns a pointer to that object. Subsequent calls to ttyname(``) will modify the same object.