在Mac OS High Sierra下无法打开pty

时间:2018-11-29 04:19:58

标签: macos emacs pty

我的问题的实质是“用户程序如何在Mac OS High Sierra上打开pty(例如/ dev / ptyp0)?”设备名称的标准open()似乎不起作用,即使其保护为crw-rw-rw-。

上下文正在Mac OS下运行Emacs。在High Sierra之前,当我命令Emacs在其中创建一个子进程的Shell窗口时,Emacs分配了一个与子进程进行通信的pty。升级到High Sierra之后,Emacs不再可以分配pty,而是使用管道与子流程进行通信。这使得子进程的行为不像终端窗口中的外壳程序,这会降低用户体验。

跟踪Emacs的操作表明,Emacs正在按顺序尝试打开系统上定义的每个pty,并每次收到errno 35。

我在网上找到了一个项目,该项目表明人们在Mac OS High Sierra上打开pty的方式与以前的Mac OS版本不同,但是未提供任何细节。

1 个答案:

答案 0 :(得分:0)

答案的实质是在类Unix系统上至少使用两种机制分配pty。 High Sierra使用与以前的Mac OS版本不同的机制,该机制显然涉及设备/ dev / ptmx,因此,如果您的程序未使用正确的机制,它将失败。在Emacs的情况下,如果它无法分配pty,则将退回到使用管道与子流程进行通信的方式,然后该子流程就不会“拥有tty”,并且您不能在其上使用tty函数。

关于Emacs,我使用的是22.1.1版本,该版本配置为使用以前的pty机制(尝试依次打开每个/ dev / ptyXX)。使用版本26.1可以解决此问题。您可以从https://emacsformacosx.com

下载作为Mac应用程序构建的Emacs 26.1版本。