使用C ++动态分配/ dev / ttyUSB *

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C ++动态分配/ dev / ttyUSB *相关的知识,希望对你有一定的参考价值。

我正在Raspbian上运行一个自定义C ++程序,它每隔一段时间就会对其USB端口进行一次电源循环。但是,我注意到/ dev / USB *枚举在电源循环之间不一致,需要能够处理这个问题。

是否有任何优雅的方法来获取字符串,如“/ dev / ttyUSB0”或“/ dev / ttyUSB1”基于当前在/ dev /中的内容?假设只有一台设备连接是公平的,但假设该设备不是通信所必需的,这是不公平的。

到目前为止我尝试过的事情:

  1. dirent.h - 似乎笨拙地抓住所有“/ dev /”并搜索“ttyUSB”
  2. 强制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 *的主要内容,如果未能解决你的问题,请参考以下文章

c 链表和动态内存分配

如何使用 malloc 为 C 中的结构创建动态内存分配?

C++程序的内存分区,为什么要使用动态内存,动态内存的分配使用释放

在 C 中使用动态内存分配创建数据库

使用 memset 进行初始化的 C 动态分配数组

Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针