ttyslot(3) 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.