gpt4 book ai didi

c - 我们如何区分控制终端和非控制终端的文件描述符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:40 25 4
gpt4 key购买 nike

如果一个进程打开了多个终端,我们如何知道哪些文件描述符用于进程 session 的控制终端,哪些用于非控制终端?

源自https://unix.stackexchange.com/questions/446207/for-a-process-what-are-the-differences-between-a-controlling-terminal-and-non-c

最佳答案

进程不一定在其控制 tty 上打开任何 fds。但是,如果一个进程有一个控制终端,它可以打开 /dev/tty 来为它获取一个 fd。 (如果它没有控制 tty,打开 /dev/tty 将失败,嗯,ENXIO,显然,这在我能找到的任何地方都没有记录,老实说,我本以为 ENODEV或 ENOTTY,但它在 Linux 和 NetBSD 上是一致的,所以它可能是某处的官方规范。)

了解 fd 是否在调用进程的控制 tty 上打开比看起来要困难得多。显而易见的事情是,首先,使用 isatty 验证它在 some tty 上打开,然后对其调用 tcgetpgrp。如果 tcgetpgrp 的 fd 参数未引用调用进程的控制 tty,则记录为失败。不幸的是,Linux 至少还允许在伪终端外部调用 tcgetpgrp(这是您打开 /dev/ptmx 时得到的),我是没有运气找到区分实际 tty 和伪终端外部的好方法; isatty 对两者都适用,大多数其他与终端相关的操作都可以应用于两者,依此类推。您可能不得不求助于 fstat 和解码 st_rdev。漂白剂。

关于c - 我们如何区分控制终端和非控制终端的文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com