至少在Linux和NetBSD上,isatty
在内部(/dev/pts/0
,/dev/ttyp0
等)或外部(/dev/ptmx
,{{f}打开时返回true假终端的{1}}等等,我可以方便地测试的所有/dev/ptyp0
操作也无法区分。原则上,您可以通过调用tcgetxxx
然后查看fstat
来说明,但是您必须知道哪些设备号用于什么,并且这些设备号在系统之间不一致。< / p>
是否存在一种可移植的方式,给定st_rdev
返回true的任意开放fd,判断它是否指向伪终端的外部?伪终结只是在POSIX中粗略指定,所以我认为没有任何标准方式,但我希望有一种适用于当前一代开源Unix的方法至少,无需为每个支持的操作系统编译设备编号表。
(这将用于isatty
之类的检查工具,以防您想知道我为什么想知道。)
答案 0 :(得分:3)
<强>
char *ptsname(int fd);
强>
ptsname()
函数返回与fd
引用的 master 对应的 slave 伪终结设备的名称。
如果
,它将失败ENOTTY
fd
未引用伪终端主设备。
因此,您可以先拨打isatty()
,然后拨打ptsname()
。
ptsname()
是
符合POSIX.1-2001,POSIX.1-2008。