繁体   English   中英

在Mac OS High Sierra下无法打开pty

[英]Cannot open pty under Mac OS High Sierra

我的问题的实质是“用户程序如何在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不同,但没有提供任何细节。

答案的实质是,在类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版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM