.TH CONS 3 
.SH NAME
cons \- console, clocks, process/process group ids, user, null, klog, stats, lights, noise, sysstat, hz, swap, key, hostowner, hostdomain, authenticate, authcheck, authenticator
.SH SYNOPSIS
.nf
.B bind #c /dev

.B /dev/authcheck
.B /dev/authenticate
.B /dev/authenticator
.B /dev/clock
.B /dev/cons
.B /dev/consctl
.B /dev/cputime
.B /dev/hostdomain
.B /dev/hostowner
.B /dev/hz
.B /dev/key
.B /dev/klog
.B /dev/lights
.B /dev/msec
.B /dev/noise
.B /dev/null
.B /dev/pgrpid
.B /dev/pid
.B /dev/ppid
.B /dev/swap
.B /dev/sysname
.B /dev/sysstat
.B /dev/time
.B /dev/user
.fi
.SH DESCRIPTION
The console device serves a one-level directory
giving access to the console and
miscellaneous information.
.PP
Reading the
.B cons
file returns characters typed on the keyboard.
Normally, characters are buffered to enable erase and kill processing.
A control-U,
.LR ^U ,
typed at the keyboard
.I kills
the current input line (removes all characters
from the buffer of characters
not yet read via
.BR cons ),
and a backspace
.I erases
the previous non-kill, non-erase character from the input buffer.
Killing and erasing only delete characters back to, but not including,
the last newline.
Characters typed at the keyboard actually produce 16-bit runes (see
.IR utf (6)),
but the runes are translated into the variable-length
.SM UTF
encoding (see
.IR utf (6))
before putting them into the buffer.
A
.IR read (2)
of length greater than zero causes the process to wait until a
newline or a
.L ^D
ends the buffer, and then returns as much of the buffer as the argument
to
.B read
allows, but only up to one complete line.
A terminating
.L ^D
is not put into the buffer.
If part of the line remains, the next
.B read
will return bytes from that remainder and not part of any new line
that has been typed since.
.PP
If
the string
.B rawon
has been written to the
.B consctl
file and the file is still open,
.B cons
is in
.IR "raw mode" :
characters are not echoed as they are typed,
backspace and
.L ^D
are not treated specially,
and characters are available to
.I read
as soon as they are typed.
Ordinary mode is reentered when
.B rawoff
is written to
.B consctl
or this file is closed.
.PP
A
.I write
(see
.IR read (2))
to
.B cons
causes the characters to be printed on the console screen.
.PP
The
.B null
file throws away anything written to it
and always returns zero bytes when read.
.PP
The
.B klog
file contains the tail of messages written by kernel logging statements.
.PP
Writing a number (as plain text) to the
.B lights
device directs any lights that are available to turn on and off.
The bits of the number are mapped to the lights in a processor-dependent way.
.PP
Writing two blank- or tab-separated numbers to the
.B noise
device causes the machine to make a tone, if possible.
The first number is the frequency, in Hertz, and the second is
the duration, in milliseconds.
.PP
The
.B hostdomain
file contains the name of the authentication domain that
this host belongs to; see
.IR auth (6).
Only the user named in
.B /dev/hostowner
may write this.
.PP
The
.B hostowner
file contains the name of the user that owns the console device files.
The hostowner also has group permissions for any local devices.
.PP
The
.B key
file is used to set the DES key used for encryption.
Each machine has one key.
Only the user named in
.B /dev/hostowner
may write this.
.PP
The
.B authenticate
file is used to authenticate new users to the kernel; see
.IR auth (6).
After an open, the first read returns a ticket request message
of the following form:
.EX
	char num;
	char authid[28];
	char authdom[48];
	char chal[8];
	char hostid[28];
	char uid[28];
.EE
Here
.I num
is 1,
.I authid
and
.I hostid
are the contents of
.BR hostowner ,
and
.I authdom
is the contents of
.BR hostdomain .
.I Chal
is an 8 byte random challenge created by the kernel.
A subsequent write of a valid ticket encrypted with the key contained in
.B key
changes the user name of the writing process to the value of
.I suid
in the ticket.
The ticket is of the form:
.EX
	char num;
	char chal[8];
	char cuid[28];
	char suid[28];
	char noncekey[7];
.EE
The ticket is valid if
.I num
is 64 and
.I chal
matches the challenge in the ticket request.
Writing an invalid ticket generates an error.
A read following a successful write yields an authenticator
message of the form:
.EX
	char num;
	char chal[8];
	char id[4];
.EE
The authenticator is encrypted in
.I noncekey
from the ticket.
.I Num
is 66,
.IR id [0-4]
are 0,
and
.I chal
matches the challenge in the original ticket request.
.PP
The
.B authenticator
file is used to generate an authenticator from a ticket.
One writes a ticket encrypted with the key contained in
.BR key ,
followed, optionally, by a 4-byte
.IR id ;
a missing
.I id
defaults to zero.
If the client uid matches the current user, a subsequent read yields
an authenticator for that ticket with the given
.IR id .
.PP
The
.B authcheck
file is used to match authenticators to tickets.
A write of an authenticator appended to the end of a ticket
succeeds if the ticket is encrypted with
the key contained in
.BR key ,
the ticket's
.I num
is 65,
the authenticator is encrypted with the ticket's
.BR noncekey ,
the authenticator's and ticket's
.IR chal 's
match, the authenticator's
.I num
is 66, and the authenticator's
.I id
is 0.  Alternatively, the write may consist of ticket, authenticator,
.IR chal ,
and
.IR id ,
in which case the given
.I chal
and
.I id
must match those of the authenticator.
.PP
The
.B user
file contains the name of the user associated with the current process.
Any process can change to user
.B none
by writing
.B none
to this file.
.PP
The rest of the files contain (mostly) read-only strings.
Each string has a fixed length: a
.IR read (2)
of more than that gives a result of that fixed length (the result does not
include a terminating zero byte);
a
.I read
of less than that length leaves the file offset so the
rest of the string (but no more) will be read the next time.
To reread the file without closing it,
.I seek
must be used to reset the offset.
When the file contains numeric data, each number is formatted
in decimal as an 11-digit number with leading blanks and
one trailing blank: twelve bytes total.
.PP
The
.B cputime
file holds 6 numbers, containing the time in milliseconds
that the current process has spent in user mode, system calls,
real elapsed time, and then the time spent, by exited children and their descendants,
in user mode, system calls, and real elapsed time.
.PP
The
.B clock
file holds two numbers: the number of
clock ticks since booting followed by the number of clock ticks
in a second.
.PP
The
.B sysname
file holds the textual name of the machine, e.g.
.BR kremvax ,
if known.
.PP
The
.B sysstat
file holds 8 numbers:
processor number, context switches, interrupts, system calls, page faults,
tlb faults, tlb purges, and load average.
The load average is in units of milli-CPUs and is decayed over time;
the others are total counts from boot time.
If the machine is a multiprocessor,
.B sysstat
holds one line per processor.
Writing anything to
.B sysstat
resets all of the counts on all processors.
.PP
The
.B swap
device holds a string of the form
.IP
.IB m1 / m2
.B memory
.IB s1 / s2
.B swap
.PP
These give, for each of
internal memory and the swapping area,
the number of pages used and the total available.
These numbers are not blank padded.
To turn on swapping, write to
.B swap
the textual file descriptor number of a file or device on which to swap.
See
.IR swap (8).
.PP
The other files served by the
.I cons
device are all single numbers:
.TP 10
.B hz
frequency of the system clock
.TP
.B msec
number of milliseconds since booting
.TP
.B pgrpid
process group number
.TP
.B pid
process number
.TP
.B ppid
parent's process number
.TP
.B time
number of seconds since the epoch 00:00:00 GMT, Jan. 1, 1970.
(Can be written once, to set at boot time.)
.SH SEE ALSO
.IR bit (3),
.IR keyboard (6),
.IR auth (6),
.IR utf (6),
.IR swap (8)
.SH SOURCE
.B /sys/src/9/port/devcons.c
.SH BUGS
For debugging, two control-T's followed by a letter
generate console output:
.L ^T^Tp
prints data about processes,
.L ^T^Tq
prints data about streams,
.L ^T^Tm
prints data about the mount device,
.L ^T^Tb
prints data about the bitblt device, and
.L ^T^Tx
prints data about kernel memory allocation.
.PP
The system can be rebooted by typing
.LR ^T^Tr .
