ttyslot(3) Library Functions Manual ttyslot(3)

ttyslot - găsește slotul terminalului utilizatorului curent într-un fișier

Biblioteca C standard (libc, -lc)

#include <unistd.h>       /* A se vedea secțiunea NOTE */
int ttyslot(void);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

ttyslot():

    Începând cu glibc 2.24:
        _DEFAULT_SOURCE
    De la glibc 2.20 la glibc 2.23:
        _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
    glibc 2.19 și versiunile anterioare:
        _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

Funcția veche ttyslot() returnează indexul intrării utilizatorului curent într-un fișier.

Acum vă întrebați: „Ce fișier?”. Ei bine, să ne uităm mai întâi la un pic de istorie.

Istoria antică

Exista un fișier /etc/ttys în UNIX6, care era citit de programul init(1) pentru a afla ce trebuie să facă cu fiecare linie de terminal. Fiecare linie era formată din trei caractere. Primul caracter era fie „0”, fie „1”, unde „0” însemna „ignoră”. Al doilea caracter desemna terminalul: „8” însemna „/dev/tty8”. Al treilea caracter era un argument pentru getty(8) care indica secvența de viteze de linie care trebuia încercată („-” însemna: începeți să încercați 110 baud). Astfel, o linie tipică era „18-”. Un blocaj pe o anumită linie era rezolvat prin schimbarea „1” în „0”, semnalând init, schimbând din nou și semnalând din nou init.

În UNIX formatul a fost schimbat: aici al doilea caracter era argumentul pentru getty(8) indicând secvența de viteze de linie care trebuia încercată („0” era: rotire în ciclu prin 300-1200-150-110 bauds; „4” era pentru consola DECwriter) în timp ce restul liniei conținea numele tty-ului. Astfel, o linie tipică era „14console”.

Sistemele ulterioare au o sintaxă mai elaborată. Sistemele de tip System V au în schimb /etc/inittab.

Istoria antică (2)

Pe de altă parte, există fișierul /etc/utmp în care sunt listate persoanele conectate în prezent. Acesta este întreținut de login(1). Are o dimensiune fixă, iar indexul corespunzător în fișier a fost determinat de login(1) folosind apelul ttyslot() pentru a găsi numărul liniei din /etc/ttys (numărând de la 1).

Astfel, funcția ttyslot() returnează indexul terminalului de control al procesului apelant din fișierul /etc/ttys, iar acesta este (de obicei) același cu indexul intrării pentru utilizatorul curent din fișierul /etc/utmp. BSD are încă fișierul /etc/ttys, dar sistemele de tip System V nu au, și, prin urmare, nu pot face referire la acesta. Astfel, pe astfel de sisteme, documentația spune că ttyslot() returnează indexul utilizatorului curent în baza de date de conturi de utilizator.

În caz de succes, această funcție returnează numărul de slot. În caz de eroare (de exemplu, dacă niciunul dintre descriptorii de fișiere 0, 1 sau 2 nu este asociat cu un terminal care apare în această bază de date), aceasta returnează 0 pe UNIX V6 și V7 și pe sistemele de tip BSD, dar -1 pe sistemele de tip System V.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
ttyslot() Siguranța firelor MT-Unsafe

Fișierul utmp se găsește în diverse locuri pe diverse sisteme, cum ar fi /etc/utmp, /var/adm/utmp, /var/run/utmp.

Niciunul.

SUSv1; marcat ca LEGACY în SUSv2; eliminat în POSIX.1-2001. SUSv2 necesită -1 în caz de eroare.

Implementarea glibc2 a acestei funcții citește fișierul _PATH_TTYS, definit în <ttyent.h> ca fiind „/etc/ttys”. Aceasta returnează 0 în caz de eroare. Deoarece sistemele Linux nu au, de obicei, „/etc/ttys”, aceasta va returna întotdeauna 0.

Pe sistemele de tip BSD și Linux, declarația lui ttyslot() este furnizată de <unistd.h>. Pe sistemele de tip System V, declarația este furnizată de <stdlib.h>. Începând cu glibc 2.24, <stdlib.h> furnizează, de asemenea, declarația cu următoarele definiții ale macrocomenzilor de testare a funcțiilor:


(_XOPEN_SOURCE >= 500 ||
        (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED))
    && ! (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)

Minix are, de asemenea, fttyslot(fd).

getttyent(3), ttyname(3), utmp(5)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06