Не удается открыть pty под Mac OS High Sierra - PullRequest
0 голосов
/ 29 ноября 2018

Суть моего вопроса такова: "Как пользовательская программа может открыть pty (например, / dev / ptyp0) в Mac OS High Sierra?"Стандартный open () с именем устройства, похоже, не работает, хотя его защита crw-rw-rw -.

Контекст запускает Emacs под Mac OS.До High Sierra, когда я приказал Emacs создать окно оболочки, в котором находится подпроцесс, Emacs выделил pty для связи с подпроцессом.После обновления до High Sierra Emacs больше не может выделять pty и использует каналы для связи с подпроцессом.Это делает подпроцесс менее похожим на окно оболочки в терминале, что ухудшает восприятие пользователя.

Отслеживание операций Emacs показывает, что Emacs пытается последовательно открыть каждый из ptys, определенных всистема, и каждый раз получал errno 35.

Я обнаружил один элемент в Интернете, который предполагает, что способ открытия pty в Mac OS High Sierra отличается от предыдущих версий Mac OS, но он не дал никаких подробностей.

1 Ответ

0 голосов
/ 02 декабря 2018

Суть ответа в том, что в Unix-подобных системах для распределения ptys используются как минимум два механизма.High Sierra использует механизм, отличный от предыдущих версий Mac OS, очевидно, с устройством / dev / ptmx, и поэтому, если ваша программа не использует правильный механизм, она выйдет из строя.В случае Emacs, если ему не удается выделить pty, он использует каналы для связи с подпроцессом, который в этом подпроцессе «не имеет tty», и вы не можете использовать функции tty для него.

Что касается Emacs, я использовал версию 22.1.1, которая была настроена на использование предыдущего механизма pty (попытка открыть каждый / dev / ptyXX в последовательности).Проблема исправлена ​​с помощью версии 26.1.Вы можете скачать версию 26.1 Emacs, созданную как приложение Mac, с https://emacsformacosx.com

...