
[英]How can you tell whether a variable is a 2D array, array of pointers or double pointers of char?
[英]How can you tell whether an fd refers to inside or the outside of a pseudoterminal?
至少在Linux和NetBSD上, isatty
在内部( /dev/pts/0
, /dev/ttyp0
等)或外部( /dev/ptmx
, /dev/ptyp0
等)上打开fds时返回true伪tcgetxxx
,以及我可以方便地测试的所有tcgetxxx
操作也无法区分。 原则上,您可以通过调用fstat
然后查看st_rdev
,但是您必须知道哪些设备号用于什么,并且这在系统之间并不一致。
有一个可移植的方法,给定一个任意打开的fd,其中isatty
返回true,告诉它是否指的是伪终端的外部? 伪终结只是在POSIX中粗略指定,所以我认为没有任何标准方法,但我希望至少有一种方法适用于当前一代的开源Unix,而无需编译设备号表支持的操作系统。
(如果您想知道为什么我想知道,这将用于lsof
的检查工具。)
根据ptsname
手册 :
char *ptsname(int fd);
ptsname()
函数返回与fd
引用的主服务器对应的从属伪终端设备的名称。
如果是,它会因ENOTTY
而失败
fd
不是指伪终端主设备。
所以你可以先调用isatty()
然后ptsname()
。
并且ptsname()
是
符合POSIX.1-2001,POSIX.1-2008。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.