По крайней мере в Linux и NetBSD, isatty
возвращает true для fds, открытых либо внутри (/dev/pts/0
, /dev/ttyp0
и т. Д.), Либо снаружи (/dev/ptmx
, /dev/ptyp0
и т. Д.) Псевдотерминалаи все операции tcgetxxx
, которые я могу удобно проверить, также не различаются.В принципе, вы можете сказать, позвонив по номеру fstat
, а затем посмотрев на st_rdev
, но затем вы должны знать, какие номера устройств используются для чего, и это не согласуется во всех системах.
Есть липереносимым способом, учитывая произвольный открытый fd, для которого isatty
возвращает true, чтобы определить, относится ли он к внешней стороне псевдотерминала?Псевдотерминалы определены только в POSIX, поэтому я не думаю, что существует какой-либо стандартный способ, но я надеюсь, что есть способ, который работает по крайней мере с текущим поколением Unix с открытым исходным кодом, без необходимостисоставьте таблицу номеров устройств для каждой поддерживаемой ОС.
(Это будет использоваться для lsof
-подобного инструмента проверки, если вам интересно, почему я хочу знать.)