语法

#include /请参阅注释* /

int ttyslot(无效);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

ttyslot():

从glibc 2.24开始: _DEFAULT_SOURCE 从glibc 2.20到2.23: _DEFAULT_SOURCE _XOPEN_SOURCE && __ XOPEN_SOURCE

另外参见

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

备注

utmp文件位于各种系统的各个位置,例如/ etc / utmp,/ var / adm / utmp,/ var / run / utmp。

该函数的glibc2实现读取文件_PATH_TTYS,该文件定义为" / etc / ttys"。错误返回0。由于Linux系统通常没有" / etc / ttys",因此它将始终返回0。

在类似BSD的系统和Linux上,ttyslot()的声明由提供。在类似于System V的系统上,声明由提供。从glibc 2.24开始,该声明还为声明提供了以下功能测试宏定义:

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

Minix也有fttyslot(fd)。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

名称

ttyslot-在某些文件中找到当前用户终端的插槽

TTYSLOT - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

遵循规范

SUSv1;在SUSv2中标记为LEGACY;已在POSIX.1-2001中删除。 SUSv2错误要求为-1。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
ttyslot()Thread safetyMT-Unsafe

说明

遗留函数ttyslot()返回某个文件中当前用户条目的索引。

现在,"什么文件?"你问。好吧,让我们先来看一些历史。

Ancient history

在UNIX V6中曾经有一个文件/ etc / ttys,该文件由init(1)程序读取以找出如何处理每条终端线。每行包含三个字符。第一个字符是aq0aq或aq1aq,其中aq0aq表示"忽略"。第二个字符表示终端:aq8aq代表" / dev / tty8"。第三个字符是getty(8)的参数,指示要尝试的线速顺序(aq-aq为:开始尝试110波特)。因此,典型的行是" 18-"。通过将aq1aq更改为aq0aq,发信号通知init,再次更改回去,并再次发信号通知init,解决了挂断问题。

在UNIX V7中,格式已更改:这里的第二个字符是getty(8)的参数,指示尝试的线速顺序(aq0aq为:循环通过300-1200-150-110波特; aq4aq用于在线控制台DECwriter),而该行的其余部分包含tty的名称。因此,典型的行是" 14console"。

以后的系统具有更精细的语法。类似V系统的系统改用/ etc / inittab。

Ancient history (2)

另一方面,文件/ etc / utmp列出了当前登录的人员。该文件由login(1)维护。它具有固定的大小,并且文件中的适当索引由login(1)使用ttyslot()调用确定,以在/ etc / ttys中找到行号(从1开始)。

The semantics of ttyslot

因此,函数ttyslot()返回文件/ etc / ttys中调用进程控制终端的索引,并且(通常)与文件/ etc /中当前用户条目的索引相同。 utmp。 BSD仍然具有/ etc / ttys文件,但是类似System V的系统没有,因此无法引用它。因此,在这样的系统上,文档说ttyslot()返回用户记帐数据库中的当前用户索引。

返回值

如果成功,此函数将返回插槽号。发生错误时(例如,如果文件描述符0、1或2没有与该数据库中出现的终端相关联),则在UNIX V6和V7以及类似BSD的系统上返回0,而在类似于System V的系统上返回-1系统。

日期:2019-08-20 18:01:33 来源:oir作者:oir