NOMBRE
ttyslot − encuentra la posición de la terminal de usuario actual en algún archivo
SINOPSIS
#include
<unistd.h> /* en sistemas tipo BSD */
#include <stdlib.h> /* en sistemas tipo SYSV
*/
int ttyslot(void);
DESCRIPCIóN
La función legacy ttyslot() devuelve el índice de la entrada de usuario actual en algún fichero.
Entonces "¿En qué fichero?" te preguntarás. Bueno, veamos algo de historia.
Historia
Antigua
Solía haber un archivo /etc/ttys en Unix V6,
que era leído por el programa init(8) para
descubrir qué hacer con cada línea terminal.
Cada línea consistía en tres caracteres. El
primer caracter podía ser ’0’ ó
’1’, donde ’0’ significaba
"ignorar". El segundo caracter denotaba la
terminal: ’8’ significaba "/dev/tty8".
El tercer caracter era un argumento para getty(8) que
indicaba la secuencia de velocidades de línea a
probar (’-’ era: comienza a probar 110 baudios).
De modo que la típica línea era
"18-". Un cuelgue en alguna línea se
resolvía cambiando el ’1’ a
’0’, señalando a init, cambiando otra
vez, y volviendo a señalar a init de nuevo.
En Unix V7 el formato se cambió: aquí el segundo caracter era un argumento a getty(8) que indicaba la secuencia de velocidades de línea a probar (’0’ era: cicla sobre 300-1200-150-110 baudios; ’4’ se destinaba a la consola en línea DECwriter) mientras que el resto de la línea contenía el nombre del tty. De modo que una línea típica era "14console".
Sistemas más modernos tienen sintaxis más elaborada. Los sistemas tipo SYSV tienen /etc/inittab en su lugar.
Historia
Antigua (2)
Por otro lado, está el archivo /etc/utmp que
listaba las personas que estaban conectadas en ese momento.
Es mantenido por login(8). Tiene un tamaño
fijo, y el índice apropiado en el archivo estaba
determinado por login(8) usando la llamada
ttyslot() para hallar el número de la
línea en /etc/ttys (contando desde 1).
La
semántica de ttyslot
Entonces, la funcion ttyslot() devuelve el
índice de la terminal controladora del proceso actual
en el archivo /etc/ttys, y eso es (normalmente) lo
mismo que el índice de la entrada del usuario actual
en el archivo /etc/utmp. BSD aún tiene el
archivo /etc/ttys , pero los sistemas tipo SYSV no, y
por tanto no pueden referenciarlo. De modo que, en
semejantes sistemas la documentación dice que
ttyslot() devuelve el índice del usuario
actual en la base de datos de contabilidad de usuario.
VALOR DEVUELTO
Si termina satisfactoriamente, esta función devuelve el número de ranura. En caso de error (p.e.: si ninguno de los descriptores de archivo 0, 1 ó 2 está asociado con una terminal que aparece en esta base de datos) devuelve 0 en Unix V6 y V7 y sistemas tipo BSD, devuelve −1 en sistemas tipo SYSV.
OBSERVACIONES
El archivo utmp se encuentra en diversos lugares en distintos sistemas, por ejemplo: /etc/utmp, /var/adm/utmp, /var/run/utmp.
La implementación de glibc2 de esta función lee el archivo _PATH_TTYS, definido en <ttyent.h> como "/etc/ttys". Devuelve 0 en caso de error. Como los sistemas Linux no suelen tener "/etc/ttys", siempre devolverá 0.
Minix también tiene fttyslot(fd).
HISTORIA
ttyslot() apareció en UNIX V7.
CONFORME A
XPG2. Legacy en SUSv2. Borrado en SUSv3. SUSv2 requiere −1 en caso de error.