C++ linux检测所有串口

Sil*_*ver 5 c++ ubuntu serial-port

有没有一种很好的方法来检测Linux上串行端口上连接的所有连接设备?我用C++编程,但也欢迎其他例子.

你可以尝试打开每个端口,当它成功时,你将它添加到端口列表,但这似乎不是一个非常好的解决方案.

您可以进入开发人员,因为我的串口是USB端口,我可以检查哪些ttyUSB ..文件已经制作完成.但是这对非USB串行端口不起作用,因为tty0到tty63的文件总是在这个目录中.

我的例子:

std::string port;
int fd 
std::vector<std::string>> list;
for(int i = 0; i < 256; ++i)
{
    port.clear();
    port.append("/dev/ttyUSB");
    port.append(std::to_string(i));
    fd = open(port.c_str(), O_RDWR | O_NOCTTY | O_DELAY);
    if(fd != -1)
    {
        list.push_back(port);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Cel*_*ada 8

在Linux中枚举设备的标准方法是浏览/sys文件系统.在这种情况下,您可以执行以下操作:

  1. 枚举所有文件 /sys/class/tty
  2. 对于每个目录/sys/class/tty/foo,检查是否/sys/class/tty/foo/device存在使用lstat().
    • 如果它不存在那么你正在处理某种虚拟tty设备(虚拟控制台端口,ptmx等...),你可以丢弃它.
    • 如果存在则保留串口foo.

您应该留下实际串行端口列表.