代码之家  ›  专栏  ›  技术社区  ›  Fabian Knapp

是否可能同时从多个进程打开tty?

  •  0
  • Fabian Knapp  · 技术社区  · 9 年前

    flock() 作用 然而,在我的测试中,我无法同时从另一个进程打开串行端口,即使没有 flock() 思维方式

    flock() 逻辑和依赖阻塞 open()

    编辑:

    思维方式 然而,似乎 .

    1 回复  |  直到 9 年前
        1
  •  1
  •   Nominal Animal    9 年前

    通常,可以同时从多个进程打开串行设备。

    TIOCEXCL ioctl() 要获得独占访问权:

    if (!ioctl(fd, TIOCEXCL)) {
        /* Any further open() on the tty
           that is currently open on descriptor fd
           will fail with errno == EBUSY
           (except for the administrator, with the 
            CAP_SYS_ADMIN capability) */
    }
    

    open() s

    ioctl(fd, TIOCNXCL);
    

    <sys/ioctl.h> 用于功能,以及 <termios.h> 对于常数。

    就我个人而言——我确实相信这是大多数Linux串行库所做的——我建议您 尝试 ioctl(fd, TIOCEXCL) 大概 如果失败,则警告用户(如果成功,则返回0,否则返回1);在所有情况下,使用 ioctl(fd, TIOCNXCL); close(fd); 关闭tty。