Originální popis anglicky: 
openpty, login_tty, forkpty - tty utility functions
Návod, kniha: Linux Programmer's Manual
#include <pty.h>  /* for openpty and forkpty */
 
#include <utmp.h> /* for login_tty */
 
int openpty(int *amaster, int *aslave, char
  *name, struct termios *termp, struct winsize *
  winp);
 
int login_tty(int fd);
 
pid_t forkpty(int *amaster, char *name, struct
  termios *termp, struct winsize *winp);
 
Link with -lutil.
The 
openpty() function finds an available pseudo-tty and returns file
  descriptors for the master and slave in 
amaster and 
aslave. If
  
name is not NULL, the filename of the slave is returned in 
name.
  If 
termp is not NULL, the terminal parameters of the slave will be set
  to the values in 
termp. If 
winp is not NULL, the window size of
  the slave will be set to the values in 
winp.
 
The 
login_tty() function prepares for a login on the tty 
fd (which
  may be a real tty device, or the slave of a pseudo-tty as returned by
  
openpty()) by creating a new session, making 
fd the controlling
  terminal for the current process, setting 
fd to be the standard input,
  output, and error streams of the current process, and closing 
fd.
 
The 
forkpty() function combines 
openpty(), 
fork(), and
  
login_tty() to create a new process operating in a pseudo-tty. The file
  descriptor of the master side of the pseudo-tty is returned in 
amaster,
  and the filename of the slave in 
name if it is not NULL. The
  
termp and 
winp parameters, if not NULL, will determine the
  terminal attributes and window size of the slave side of the pseudo-tty.
If a call to 
openpty(), 
login_tty(), or 
forkpty() is not
  successful, -1 is returned and 
errno is set to indicate the error.
  Otherwise, 
openpty(), 
login_tty(), and the child process of
  
forkpty() return 0, and the parent process of 
forkpty() returns
  the process ID of the child process.
openpty() will fail if:
  - ENOENT
- There are no available ttys.
login_pty() will fail if 
ioctl() fails to set 
fd to the
  controlling terminal of the current process.
forkpty() will fail if either 
openpty() or 
fork() fails.
These functions are included in libutil, hence you'll need to add 
-lutil
  to your compiler commandline.
/dev/[pt]ty[pqrstuwxyzabcdePQRST][0123456789abcdef]
These are BSD functions, present in libc5 and glibc2.
Nobody knows how much space should be reserved for 
name. So, calling
  
openpty() or 
forkpty() with non-NULL 
name may not be
  secure.
fork(2)