.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 .