diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
| commit | ac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (patch) | |
| tree | 9367490586c84cba28652e443e3166d66c33b0d9 /static/freebsd/man4/tty.4 3.html | |
| parent | 253e67c8b3a72b3a4757fdbc5845297628db0a4a (diff) | |
docs: Added All FreeBSD Manuals
Diffstat (limited to 'static/freebsd/man4/tty.4 3.html')
| -rw-r--r-- | static/freebsd/man4/tty.4 3.html | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/static/freebsd/man4/tty.4 3.html b/static/freebsd/man4/tty.4 3.html new file mode 100644 index 00000000..0145d281 --- /dev/null +++ b/static/freebsd/man4/tty.4 3.html @@ -0,0 +1,337 @@ +<table class="head"> + <tr> + <td class="head-ltitle">TTY(4)</td> + <td class="head-vol">Device Drivers Manual</td> + <td class="head-rtitle">TTY(4)</td> + </tr> +</table> +<div class="manual-text"> +<section class="Sh"> +<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> +<p class="Pp"><code class="Nm">tty</code> — <span class="Nd">general + terminal interface</span></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> +<p class="Pp"><code class="In">#include + <<a class="In">sys/ioctl.h</a>></code></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<p class="Pp">This section describes the interface to the terminal drivers in + the system.</p> +<section class="Ss"> +<h2 class="Ss" id="Terminal_Special_Files"><a class="permalink" href="#Terminal_Special_Files">Terminal + Special Files</a></h2> +<p class="Pp">Each hardware terminal port on the system has several terminal + special device files associated with it in the directory ``/dev/'' (for + example, ``/dev/tty03'' and ``/dev/cua03''). When a user logs into the + system on one of these hardware terminal ports, the system has already + opened the associated device and prepared the line for normal interactive + use (see <a class="Xr">getty(8)</a>.) There is also a special case of a + terminal file that connects not to a hardware terminal port, but to another + program on the other side. These special terminal devices are called + <a class="permalink" href="#ptys"><i class="Em" id="ptys">ptys</i></a> and + provide the mechanism necessary to give users the same interface to the + system when logging in over a network (using <a class="Xr">telnet(1)</a> for + example). Even in these cases the details of how the terminal file was + opened and set up is already handled by special software in the system. + Thus, users do not normally need to worry about the details of how these + lines are opened or used. Also, these lines are often used for dialing out + of a system (through an out-calling modem), but again the system provides + programs that hide the details of accessing these terminal special files + (see <a class="Xr">tip(1)</a>).</p> +<p class="Pp" id="line">When an interactive user logs in, the system prepares + the line to behave in a certain way (called a + <a class="permalink" href="#line"><i class="Em">line discipline</i></a>), + the particular details of which is described in <a class="Xr">stty(1)</a> at + the command level, and in <a class="Xr">termios(4)</a> at the programming + level. A user may be concerned with changing settings associated with his + particular login terminal and should refer to the preceding man pages for + the common cases. The remainder of this man page is concerned with + describing details of using and controlling terminal devices at a low level, + such as that possibly required by a program wishing to provide features + similar to those provided by the system.</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Terminal_File_Operations"><a class="permalink" href="#Terminal_File_Operations">Terminal + File Operations</a></h2> +<p class="Pp">All of the following operations are invoked using the + <a class="Xr">ioctl(2)</a> system call. Refer to that man page for a + description of the + <a class="permalink" href="#request"><i class="Em" id="request">request</i></a> + and <i class="Em">argp</i> parameters. In addition to the ioctl + <i class="Em">requests</i> defined here, the specific line discipline in + effect will define other <i class="Em">requests</i> specific to it (actually + <a class="Xr">termios(4)</a> defines them as function calls, not ioctl + <i class="Em">requests</i>.) The following section lists the available ioctl + requests. The name of the request, a description of its purpose, and the + typed <i class="Em">argp</i> parameter (if any) are listed. For example, the + first entry says</p> +<p class="Pp"></p> +<div class="Bd Bd-indent"><i class="Em">TIOCSPGRP int *tpgrp</i></div> +<p class="Pp">and would be called on the terminal associated with file + descriptor zero by the following code fragment:</p> +<div class="Bd Pp Li"> +<pre> int pgrp; + + pgrp = getpgrp(); + ioctl(0, TIOCSPGRP, &pgrp);</pre> +</div> +</section> +<section class="Ss"> +<h2 class="Ss" id="Terminal_File_Request_Descriptions"><a class="permalink" href="#Terminal_File_Request_Descriptions">Terminal + File Request Descriptions</a></h2> +<dl class="Bl-tag"> + <dt id="TIOCSETD"><a class="permalink" href="#TIOCSETD"><code class="Dv">TIOCSETD</code></a> + <var class="Fa">int *ldisc</var></dt> + <dd>This call is obsolete but left for compatibility. Before + <span class="Ux">FreeBSD 8.0</span>, it would change to the new line + discipline pointed to by <var class="Fa">ldisc</var>.</dd> + <dt id="TIOCGETD"><a class="permalink" href="#TIOCGETD"><code class="Dv">TIOCGETD</code></a> + <var class="Fa">int *ldisc</var></dt> + <dd>Return the current line discipline in the integer pointed to by + <var class="Fa">ldisc</var>.</dd> + <dt id="TIOCSBRK"><a class="permalink" href="#TIOCSBRK"><code class="Dv">TIOCSBRK</code></a> + <var class="Fa">void</var></dt> + <dd>Set the terminal hardware into BREAK condition.</dd> + <dt id="TIOCCBRK"><a class="permalink" href="#TIOCCBRK"><code class="Dv">TIOCCBRK</code></a> + <var class="Fa">void</var></dt> + <dd>Clear the terminal hardware BREAK condition.</dd> + <dt id="TIOCSDTR"><a class="permalink" href="#TIOCSDTR"><code class="Dv">TIOCSDTR</code></a> + <var class="Fa">void</var></dt> + <dd>Assert data terminal ready (DTR).</dd> + <dt id="TIOCCDTR"><a class="permalink" href="#TIOCCDTR"><code class="Dv">TIOCCDTR</code></a> + <var class="Fa">void</var></dt> + <dd>Clear data terminal ready (DTR).</dd> + <dt id="TIOCGPGRP"><a class="permalink" href="#TIOCGPGRP"><code class="Dv">TIOCGPGRP</code></a> + <var class="Fa">int *tpgrp</var></dt> + <dd>Return the current process group with which the terminal is associated in + the integer pointed to by <var class="Fa">tpgrp</var>. This is the + underlying call that implements the <a class="Xr">termios(4)</a> + <a class="permalink" href="#tcgetattr"><code class="Fn" id="tcgetattr">tcgetattr</code></a>() + call.</dd> + <dt id="TIOCSPGRP"><a class="permalink" href="#TIOCSPGRP"><code class="Dv">TIOCSPGRP</code></a> + <var class="Fa">int *tpgrp</var></dt> + <dd>Associate the terminal with the process group (as an integer) pointed to + by <var class="Fa">tpgrp</var>. This is the underlying call that + implements the <a class="Xr">termios(4)</a> + <a class="permalink" href="#tcsetattr"><code class="Fn" id="tcsetattr">tcsetattr</code></a>() + call.</dd> + <dt id="TIOCGETA"><a class="permalink" href="#TIOCGETA"><code class="Dv">TIOCGETA</code></a> + <var class="Fa">struct termios *term</var></dt> + <dd>Place the current value of the termios state associated with the device in + the termios structure pointed to by <var class="Fa">term</var>. This is + the underlying call that implements the <a class="Xr">termios(4)</a> + <code class="Fn">tcgetattr</code>() call.</dd> + <dt id="TIOCSETA"><a class="permalink" href="#TIOCSETA"><code class="Dv">TIOCSETA</code></a> + <var class="Fa">struct termios *term</var></dt> + <dd>Set the termios state associated with the device immediately. This is the + underlying call that implements the <a class="Xr">termios(4)</a> + <code class="Fn">tcsetattr</code>() call with the + <code class="Dv">TCSANOW</code> option.</dd> + <dt id="TIOCSETAW"><a class="permalink" href="#TIOCSETAW"><code class="Dv">TIOCSETAW</code></a> + <var class="Fa">struct termios *term</var></dt> + <dd>First wait for any output to complete, then set the termios state + associated with the device. This is the underlying call that implements + the <a class="Xr">termios(4)</a> <code class="Fn">tcsetattr</code>() call + with the <code class="Dv">TCSADRAIN</code> option.</dd> + <dt id="TIOCSETAF"><a class="permalink" href="#TIOCSETAF"><code class="Dv">TIOCSETAF</code></a> + <var class="Fa">struct termios *term</var></dt> + <dd>First wait for any output to complete, clear any pending input, then set + the termios state associated with the device. This is the underlying call + that implements the <a class="Xr">termios(4)</a> + <code class="Fn">tcsetattr</code>() call with the + <code class="Dv">TCSAFLUSH</code> option.</dd> + <dt id="TIOCOUTQ"><a class="permalink" href="#TIOCOUTQ"><code class="Dv">TIOCOUTQ</code></a> + <var class="Fa">int *num</var></dt> + <dd>Place the current number of characters in the output queue in the integer + pointed to by <var class="Fa">num</var>.</dd> + <dt id="TIOCSTI"><a class="permalink" href="#TIOCSTI"><code class="Dv">TIOCSTI</code></a> + <var class="Fa">char *cp</var></dt> + <dd>Simulate typed input. Pretend as if the terminal received the character + pointed to by <var class="Fa">cp</var>.</dd> + <dt id="TIOCNOTTY"><a class="permalink" href="#TIOCNOTTY"><code class="Dv">TIOCNOTTY</code></a> + <var class="Fa">void</var></dt> + <dd>In the past, when a process that did not have a controlling terminal (see + <a class="permalink" href="#The"><i class="Em" id="The">The Controlling + Terminal</i></a> in <a class="Xr">termios(4)</a>) first opened a terminal + device, it acquired that terminal as its controlling terminal. For some + programs this was a hazard as they did not want a controlling terminal in + the first place, and this provides a mechanism to disassociate the + controlling terminal from the calling process. It + <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be + called by opening the file <span class="Pa">/dev/tty</span> and calling + <code class="Dv">TIOCNOTTY</code> on that file descriptor. + <p class="Pp" id="open">The current system does not allocate a controlling + terminal to a process on an + <a class="permalink" href="#open"><code class="Fn">open</code></a>() + call: there is a specific ioctl called <code class="Dv">TIOCSCTTY</code> + to make a terminal the controlling terminal. In addition, a program can + <code class="Fn">fork</code>() and call the + <code class="Fn">setsid</code>() system call which will place the + process into its own session - which has the effect of disassociating it + from the controlling terminal. This is the new and preferred method for + programs to lose their controlling terminal.</p> + <p class="Pp" id="fork">However, environmental restrictions may prohibit the + process from being able to + <a class="permalink" href="#fork"><code class="Fn">fork</code></a>() and + call the + <a class="permalink" href="#setsid"><code class="Fn" id="setsid">setsid</code></a>() + system call to disassociate it from the controlling terminal. In this + case, it must use <code class="Dv">TIOCNOTTY</code>.</p> + </dd> + <dt id="TIOCSTOP"><a class="permalink" href="#TIOCSTOP"><code class="Dv">TIOCSTOP</code></a> + <var class="Fa">void</var></dt> + <dd>Stop output on the terminal (like typing ^S at the keyboard).</dd> + <dt id="TIOCSTART"><a class="permalink" href="#TIOCSTART"><code class="Dv">TIOCSTART</code></a> + <var class="Fa">void</var></dt> + <dd>Start output on the terminal (like typing ^Q at the keyboard).</dd> + <dt id="TIOCSCTTY"><a class="permalink" href="#TIOCSCTTY"><code class="Dv">TIOCSCTTY</code></a> + <var class="Fa">void</var></dt> + <dd>Make the terminal the controlling terminal for the process (the process + must not currently have a controlling terminal).</dd> + <dt id="TIOCDRAIN"><a class="permalink" href="#TIOCDRAIN"><code class="Dv">TIOCDRAIN</code></a> + <var class="Fa">void</var></dt> + <dd>Wait until all output is drained, or until the drain wait timeout + expires.</dd> + <dt id="TIOCGDRAINWAIT"><a class="permalink" href="#TIOCGDRAINWAIT"><code class="Dv">TIOCGDRAINWAIT</code></a> + <var class="Fa">int *timeout</var></dt> + <dd>Return the current drain wait timeout in seconds.</dd> + <dt id="TIOCSDRAINWAIT"><a class="permalink" href="#TIOCSDRAINWAIT"><code class="Dv">TIOCSDRAINWAIT</code></a> + <var class="Fa">int *timeout</var></dt> + <dd>Set the drain wait timeout in seconds. A value of zero disables timeouts. + The default drain wait timeout is controlled by the tunable + <a class="Xr">sysctl(8)</a> OID + <var class="Va">kern.tty_drainwait</var>.</dd> + <dt id="TIOCEXCL"><a class="permalink" href="#TIOCEXCL"><code class="Dv">TIOCEXCL</code></a> + <var class="Fa">void</var></dt> + <dd>Set exclusive use on the terminal. No further opens are permitted except + by root. Of course, this means that programs that are run by root (or + setuid) will not obey the exclusive setting - which limits the usefulness + of this feature.</dd> + <dt id="TIOCNXCL"><a class="permalink" href="#TIOCNXCL"><code class="Dv">TIOCNXCL</code></a> + <var class="Fa">void</var></dt> + <dd>Clear exclusive use of the terminal. Further opens are permitted.</dd> + <dt id="TIOCFLUSH"><a class="permalink" href="#TIOCFLUSH"><code class="Dv">TIOCFLUSH</code></a> + <var class="Fa">int *what</var></dt> + <dd>If the value of the int pointed to by <var class="Fa">what</var> contains + the <code class="Dv">FREAD</code> bit as defined in + <code class="In"><<a class="In">sys/file.h</a>></code>, then all + characters in the input queue are cleared. If it contains the + <code class="Dv">FWRITE</code> bit, then all characters in the output + queue are cleared. If the value of the integer is zero, then it behaves as + if both the <code class="Dv">FREAD</code> and + <code class="Dv">FWRITE</code> bits were set (i.e., clears both + queues).</dd> + <dt id="TIOCGWINSZ"><a class="permalink" href="#TIOCGWINSZ"><code class="Dv">TIOCGWINSZ</code></a> + <var class="Fa">struct winsize *ws</var></dt> + <dd>Put the window size information associated with the terminal in the + <var class="Va">winsize</var> structure pointed to by + <var class="Fa">ws</var>. The window size structure contains the number of + rows and columns (and pixels if appropriate) of the devices attached to + the terminal. It is set by user software and is the means by which most + full-screen oriented programs determine the screen size. The + <var class="Va">winsize</var> structure is provided by + <code class="In"><<a class="In">sys/ioctl.h</a>></code>.</dd> + <dt id="TIOCSWINSZ"><a class="permalink" href="#TIOCSWINSZ"><code class="Dv">TIOCSWINSZ</code></a> + <var class="Fa">struct winsize *ws</var></dt> + <dd>Set the window size associated with the terminal to be the value in the + <var class="Va">winsize</var> structure pointed to by + <var class="Fa">ws</var> (see above).</dd> + <dt id="TIOCCONS"><a class="permalink" href="#TIOCCONS"><code class="Dv">TIOCCONS</code></a> + <var class="Fa">int *on</var></dt> + <dd>If <var class="Fa">on</var> points to a non-zero integer, redirect kernel + console output (kernel printf's) to this terminal. If + <var class="Fa">on</var> points to a zero integer, redirect kernel console + output back to the normal console. This is usually used on workstations to + redirect kernel messages to a particular window.</dd> + <dt id="TIOCMSET"><a class="permalink" href="#TIOCMSET"><code class="Dv">TIOCMSET</code></a> + <var class="Fa">int *state</var></dt> + <dd>The integer pointed to by <var class="Fa">state</var> contains bits that + correspond to modem state. Following is a list of defined variables and + the modem state they represent: + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt>TIOCM_LE</dt> + <dd>Line Enable.</dd> + <dt>TIOCM_DTR</dt> + <dd>Data Terminal Ready.</dd> + <dt>TIOCM_RTS</dt> + <dd>Request To Send.</dd> + <dt>TIOCM_ST</dt> + <dd>Secondary Transmit.</dd> + <dt>TIOCM_SR</dt> + <dd>Secondary Receive.</dd> + <dt>TIOCM_CTS</dt> + <dd>Clear To Send.</dd> + <dt>TIOCM_CAR</dt> + <dd>Carrier Detect.</dd> + <dt>TIOCM_CD</dt> + <dd>Carrier Detect (synonym).</dd> + <dt>TIOCM_RNG</dt> + <dd>Ring Indication.</dd> + <dt>TIOCM_RI</dt> + <dd>Ring Indication (synonym).</dd> + <dt>TIOCM_DSR</dt> + <dd>Data Set Ready.</dd> + </dl> + <p class="Pp">This call sets the terminal modem state to that represented by + <var class="Fa">state</var>. Not all terminals may support this.</p> + </dd> + <dt id="TIOCMGET"><a class="permalink" href="#TIOCMGET"><code class="Dv">TIOCMGET</code></a> + <var class="Fa">int *state</var></dt> + <dd>Return the current state of the terminal modem lines as represented above + in the integer pointed to by <var class="Fa">state</var>.</dd> + <dt id="TIOCMBIS"><a class="permalink" href="#TIOCMBIS"><code class="Dv">TIOCMBIS</code></a> + <var class="Fa">int *state</var></dt> + <dd>The bits in the integer pointed to by <var class="Fa">state</var> + represent modem state as described above, however the state is OR-ed in + with the current state.</dd> + <dt id="TIOCMBIC"><a class="permalink" href="#TIOCMBIC"><code class="Dv">TIOCMBIC</code></a> + <var class="Fa">int *state</var></dt> + <dd>The bits in the integer pointed to by <var class="Fa">state</var> + represent modem state as described above, however each bit which is on in + <var class="Fa">state</var> is cleared in the terminal.</dd> +</dl> +</section> +</section> +<section class="Sh"> +<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION + NOTES</a></h1> +<p class="Pp">The total number of input and output bytes through all terminal + devices are available via the <var class="Va">kern.tty_nin</var> and + <var class="Va">kern.tty_nout</var> read-only <a class="Xr">sysctl(8)</a> + variables.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE + ALSO</a></h1> +<p class="Pp"><a class="Xr">stty(1)</a>, <a class="Xr">ioctl(2)</a>, + <a class="Xr">ng_tty(4)</a>, <a class="Xr">pts(4)</a>, + <a class="Xr">pty(4)</a>, <a class="Xr">termios(4)</a>, + <a class="Xr">uart(4)</a>, <a class="Xr">getty(8)</a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> +<p class="Pp">A console typewriter device <span class="Pa">/dev/tty</span> and + asynchronous communication interfaces <span class="Pa">/dev/tty[0-5]</span> + first appeared in <span class="Ux">Version 1 AT&T + UNIX</span>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> +<p class="Pp">Before the Internet, serial ports were primarily used for inbound + connections from terminals, either directly or through modems, these days + serial ports are primarily used for outbound connections to devices, an + evolution which unfortunately has spread the relevant documentation over + three different manual pages: <a class="Xr">termios(4)</a>, + <a class="Xr">uart(4)</a> and <a class="Xr">tty(4)</a>.</p> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">April 3, 2022</td> + <td class="foot-os">FreeBSD 15.0</td> + </tr> +</table> |
