首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时从多个进程打开tty?

问同时从多个进程打开tty?
EN

Stack Overflow用户
提问于 2017-07-26 19:57:26
回答 1查看 2.1K关注 0票数 0

我必须确保linux上的tty设备只能同时从一个实例访问。为此,我实现了一个flock()函数。然而,在我的测试中,即使没有flock()逻辑,我也无法同时从另一个进程打开串口。

我现在想知道这是否是所有情况下的正常行为,所以我可以删除我的flock()逻辑并依赖阻塞的open()逻辑?在任何情况下都可以同时从不同的实例打开串口吗?

编辑:

我已经发现,在没有flock()逻辑的情况下,同时多次打开tty端口是可能的。但是,open()函数似乎由于flock()而被阻塞。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-26 22:16:03

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

您可以使用TIOCEXCL ioctl()获得独占访问:

代码语言:javascript
复制
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(),

代码语言:javascript
复制
ioctl(fd, TIOCNXCL);

函数需要包括<sys/ioctl.h>,常量需要包含<termios.h>。

许多Linux串行库已经这样做了。有些串行驱动程序一次也只能打开一个,因此要确定您所看到的行为的原因,我需要更多的详细信息(您如何打开串行设备,特别是使用的串行设备驱动程序)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45336300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档