首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何判断fd是指伪终端的内部还是外部?

如何判断fd是指伪终端的内部还是外部?
EN

Stack Overflow用户
提问于 2018-06-02 05:26:06
回答 1查看 95关注 0票数 4

至少在Linux和NetBSD上,对于在伪终端的内部(/dev/pts/0/dev/ttyp0等)或外部(/dev/ptmx/dev/ptyp0等)打开的fds,isatty返回true,并且我可以方便地测试的所有tcgetxxx操作也无法区分。原则上,您可以通过调用fstat然后查看st_rdev来判断,但是您必须知道哪些设备编号用于什么用途,这在系统中并不一致。

有没有一种便携的方法,给出一个任意打开的fd,isatty返回true,来判断它是否指的是伪终端的外部?伪终端在POSIX中只有粗略的规定,所以我不认为有任何标准的方法,但我希望至少有一种方法可以在当前一代的开源Unixes上工作,而不必为每个支持的操作系统编译一个设备号表。

(这将用于lsof-like检查工具,如果您想知道我为什么想知道的话。)

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 08:43:06

根据ptsname manual的说法

char *ptsname(int fd);

ptsname()函数返回引用的对应的从伪终端设备的名称。

如果出现以下情况,它将使用ENOTTY失败

fd不是指伪终端主设备。

因此,您可以先调用isatty(),然后调用ptsname()

ptsname()

符合POSIX.1-2001、POSIX.1-2008的

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

https://stackoverflow.com/questions/50651184

复制
相关文章

相似问题

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