在Linux中安全地初始化tty的正确方法是什么,例如gettys或登录?似乎没有便携式(如Posix)解决方案。据我所知,我会找到相关文档(省略错误处理):
- 如果不是会话负责人[getsid,setsid]
,则创建新会话
- open tty(按惯例成为控制终端)[open,isatty]
- 设置所有者/群组/权限[fchown,fchmod]
- 关闭stdin,stdout,stderr和tty的关闭文件描述符[close](LKML)
- 忽略vhangup的SIGHUP [sigemptyset,sigaction]
- 挂起tty [vhangup]
- 将SIGHUP处理设置为默认行为[sigemptyset,sigaction]
- reopen tty [open]
- 将tty文件描述符复制到stdin,stdout,stderr [dup]
醇>
与其他实现相比,他们明确设置控制终端或测试面向字符的设备文件:
- fgetty:ioctl with TIOCSCTTY
- agetty:ioctl with TIOCSCTTY,TIOCNOTTY,fstat for S_IFCHR
- mingetty:两次ioctl与TIOCSCTTY
这有必要吗?目标只是哑终端,没有串行设备或调制解调器。 vhangup()是如何工作的,尤其是关于这些步骤之间的竞争条件?