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.
XPG2. Legacy en SUSv2. Borrado en SUSv3. SUSv2 requiere -1 en caso de error.
VÉASE TAMBIÉN¶
getttyent(3),
ttyname(3),
utmp(5)