gpt4 book ai didi

c - 可以同时从多个进程打开 tty 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:46 25 4
gpt4 key购买 nike

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

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

编辑:

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

最佳答案

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

您可以使用 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()小号,

ioctl(fd, TIOCNXCL);

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

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

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

关于c - 可以同时从多个进程打开 tty 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com