首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何区分控制终端和非控制终端的文件描述?

如何区分控制终端和非控制终端的文件描述?
EN

Stack Overflow用户
提问于 2018-06-02 03:56:15
回答 1查看 191关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 04:55:30

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

了解调用进程的控制tty上的fd是否打开比看起来要困难得多。最明显的做法是,首先用isatty验证它在某个tty上是否打开,然后对它调用tcgetpgrp。如果tcgetpgrp的fd参数没有引用调用进程的控制tty,那么它就会失败。不幸的是,Linux至少还允许在伪终端的外部调用tcgetpgrp (这是您打开/dev/ptmx时得到的结果),我没有找到一个好的方法来区分实际的tty和伪终端的外部;isatty对这两种情况都是正确的,大多数其他与终端相关的操作都可以应用于这两种情况,等等。您可能不得不求助于fstat和解码st_rdev。布莱奇。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50650251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档