使用C ++动态分配/ dev / ttyUSB *
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C ++动态分配/ dev / ttyUSB *相关的知识,希望对你有一定的参考价值。
我正在Raspbian上运行一个自定义C ++程序,它每隔一段时间就会对其USB端口进行一次电源循环。但是,我注意到/ dev / USB *枚举在电源循环之间不一致,需要能够处理这个问题。
是否有任何优雅的方法来获取字符串,如“/ dev / ttyUSB0”或“/ dev / ttyUSB1”基于当前在/ dev /中的内容?假设只有一台设备连接是公平的,但假设该设备不是通信所必需的,这是不公平的。
到目前为止我尝试过的事情:
- dirent.h - 似乎笨拙地抓住所有“/ dev /”并搜索“ttyUSB”
- 强制USB设备名称是静态的 - 我需要我的程序不依赖于串行端口上使用的设备
我并不完全反对使用系统调用,但如果可能的话,我希望避免使用“ls -l / dev / ttyUSB *”。
答案
执行此操作的最佳方法是创建一个udev规则,该规则将在插入设备时创建符号链接。您的udev规则将如下所示:
ATTRS{interface}="usb_converter", SYMLINK+="custom_link"
请注意,ATTRS
下有更多选项可用于匹配特定的USB设备。您可以获得PID / VID,设备序列号,制造商等信息。如果您的USB转串口转换器是由FTDI制造的,我通常使用FTPROG重新编程设备并赋予它独特的信息。接口名称(在这种情况下,usb_converter
),然后匹配,以确保它将始终相同。
有关更多信息,请参阅this answer;有关编写udev规则的信息,请参阅this guide。
以上是关于使用C ++动态分配/ dev / ttyUSB *的主要内容,如果未能解决你的问题,请参考以下文章