【发布时间】:2018-04-06 15:06:25
【问题描述】:
如何使用 Posix/C 函数在 Linux 中检查串行端口是否已打开?我想查看串口的状态,看看串口是否打开。
我想知道哪些方法适用:
检查文件描述符看串口是否打开
检查串口文件名以查看串口是否打开,在下面的示例中为“/dev/ttyUSB0”
--
// This code is for example purposes only
int open_port()
{
int fd;
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0)
{
perror("open_port: Unable to open /dev/ttyf1 - ");
}
return fd;
}
我想有一种“标准”方式可以做到这一点,这就是我想要达到的目标。
【问题讨论】:
-
看起来很相似,但没有提供解决方案,因为这是检查端口是否打开的方法。它只是提供了一种独占锁定它的方法。
-
@Xofo:应用程序应该以独占方式锁定端口(通过打开文件描述符上的 TIOCEXCL ioctl 和/或 flock()/fcntl())以避免其他人能够打开设备并弄乱它的设置、输入或输出。 这是标准解决方案。要检查端口是否正在使用,您只需尝试打开它。如果您可以打开它,则它不会被任何其他应用程序使用。所有其他解决方案都是错误的,因为它们包含竞争条件,或者不可靠或与例如冲突。设备发现守护进程。
-
@NominalAnimal - 感谢您的评论。您的评论是一个解决方案。您是说您的解决方案是“最佳实践”解决方案。其他解决方案是什么?我认为它们值得讨论。你说 TIOCEXCL ioctl AND/OR flock()/fcntl() - 一个或两个函数安全吗?
标签: c linux serial-port