C++ Linux下的COM端口检测

C++ Linux下的COM端口检测,c++,c,embedded,linux-device-driver,udev,C++,C,Embedded,Linux Device Driver,Udev,请告诉我是否有任何API、系统调用、函数(在Linux中),我可以使用我的C程序动态检测COM端口,也就是说,每当USB调制解调器加密狗插入端口时,我都可以使用API、系统调用或我的C程序中的函数检测COM端口。在Linux中,串行端口不称为COMx。它们(实际串行端口)通常被命名为/dev/ttySx,其中x是一个数字,从0开始表示COM1,从1开始表示COM2,等等 如果您想要一个列表,您应该在/dev中查找ttyS设备 下面是关于Linux上串行端口编程的非常详细的页面: 最后,请

请告诉我是否有任何API、系统调用、函数(在Linux中),我可以使用我的C程序动态检测COM端口,也就是说,每当USB调制解调器加密狗插入端口时,我都可以使用API、系统调用或我的C程序中的函数检测COM端口。

在Linux中,串行端口不称为COMx。它们(实际串行端口)通常被命名为
/dev/ttySx
,其中x是一个数字,从0开始表示COM1,从1开始表示COM2,等等

如果您想要一个列表,您应该在
/dev
中查找
ttyS
设备

下面是关于Linux上串行端口编程的非常详细的页面:


最后,请注意,对于像这样的一般性问题,快速回答会有很大帮助

在Linux中,串行端口不称为COMx。它们(实际串行端口)通常被命名为
/dev/ttySx
,其中x是一个数字,从0开始表示COM1,从1开始表示COM2,等等

如果您想要一个列表,您应该在
/dev
中查找
ttyS
设备

下面是关于Linux上串行端口编程的非常详细的页面:


最后,请注意,对于像这样的一般性问题,快速回答会有很大帮助

根据您的调制解调器,USB串行端口设备可能显示为
/dev/ttyUSBn
/dev/ttyACMn
,其中
n
是从
0
开始的数字

您可以将
udev
规则配置为在插入或删除设备时自动作出反应

如果您想在C中自己完成这项工作,您需要使用
netlink(7)
sockets。如果您不想摆弄它们,可能更简单的方法是简单地使用udev软件包提供的实用工具
udevadm
(udevadm在内部使用
netlink
),类似这样:

 udevadm monitor --kernel
如果要在C程序中使用它,只需在管道中调用它,如下所示:

 stdbuf -o0 udevadm monitor --kernel

然后设置
选择
循环,这样它可以立即做出反应。为了避免udevadm提供的缓冲,必须使用stdbuf进行包装。

根据您的调制解调器,USB串行端口设备可能显示为
/dev/ttyUSBn
/dev/ttyACMn
,其中
n
是从
0
开始的数字

您可以将
udev
规则配置为在插入或删除设备时自动作出反应

如果您想在C中自己完成这项工作,您需要使用
netlink(7)
sockets。如果您不想摆弄它们,可能更简单的方法是简单地使用udev软件包提供的实用工具
udevadm
(udevadm在内部使用
netlink
),类似这样:

 udevadm monitor --kernel
如果要在C程序中使用它,只需在管道中调用它,如下所示:

 stdbuf -o0 udevadm monitor --kernel

然后设置
选择
循环,这样它可以立即做出反应。有必要使用stdbuf来包装,以避免udevadm提供的缓冲。

感谢Jonathon的回复。我有时会在ttyUSB00到ttyUSB02中检测到USB调制解调器,我通过发出命令“lsusb”和“lsusb-t”发现了这一点,但我要使用我的C程序中的一个函数检测这些端口,我将查看您发送的链接。再问一件事,我发现有时它是/dev/sr0或/dev/sr1,我有点困惑,你能告诉我/dev/srX是如何产生的吗?。提前感谢。看起来
mvp
下面的回答中有关于这些动态添加的串行端口的更多详细信息。感谢Jonathon的回复。我有时会在ttyUSB00到ttyUSB02中检测到USB调制解调器,我通过发出命令“lsusb”和“lsusb-t”发现了这一点,但我要使用我的C程序中的一个函数检测这些端口,我将查看您发送的链接。再问一件事,我发现有时它是/dev/sr0或/dev/sr1,我有点困惑,你能告诉我/dev/srX是如何产生的吗?。提前感谢。看起来
mvp
下面的回答中有关于这些动态添加的串行端口的更多详细信息。据我所知,虽然这个问题得到了更好的答案。据我所知,虽然这一个得到了更好的答案。在我的情况下,我不得不使用
-o0
而不是
-i0
@HeyYO:你说得对,那是一个打字错误。谢谢你,修好了!在我的情况下,我不得不使用
-o0
而不是
-i0
@HeyYO:你说得对,那是个打字错误。谢谢你,修好了!