【问题标题】:Cannot open pty under Mac OS High Sierra在 Mac OS High Sierra 下无法打开 pty
【发布时间】:2019-05-01 02:07:51
【问题描述】:

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

上下文在 Mac OS 下运行 Emacs。在 High Sierra 之前,当我命令 Emacs 创建一个包含子进程的 shell 窗口时,Emacs 分配了一个与子进程通信的 pty。升级到 High Sierra 后,Emacs 无法再分配 pty,并使用管道与子进程通信。这使得子进程的行为不像终端窗口中的 shell,这是一种较差的用户体验。

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

我在网上找到了一项表明在 Mac OS High Sierra 上打开 pty 的方式与以前版本的 Mac OS 不同,但它没有提供详细信息。

【问题讨论】:

    标签: macos emacs pty


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2018-06-21
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2018-06-02
      相关资源
      最近更新 更多