C++ 如何在Linux&;上迭代com端口并打印到控制台;C++;?
我觉得这应该是相当容易的,但它继续困扰着我,所以它在这里。我一直在试图找到一个简单的解决方案,迭代linux上可用的UART串行端口(我运行的是最新版本的Manjaro linux),然后将这些端口打印到控制台。然而,到目前为止,我发现的所有解决方案都令人难以置信地复杂,或者它们最终抛出了一堆我在测试它们时无法弄清楚的错误 所以,我求助于回到这里,看看是否还有其他人有任何想法。在Windows上,有一个Windows的C++ 如何在Linux&;上迭代com端口并打印到控制台;C++;?,c++,linux,loops,serial-port,C++,Linux,Loops,Serial Port,我觉得这应该是相当容易的,但它继续困扰着我,所以它在这里。我一直在试图找到一个简单的解决方案,迭代linux上可用的UART串行端口(我运行的是最新版本的Manjaro linux),然后将这些端口打印到控制台。然而,到目前为止,我发现的所有解决方案都令人难以置信地复杂,或者它们最终抛出了一堆我在测试它们时无法弄清楚的错误 所以,我求助于回到这里,看看是否还有其他人有任何想法。在Windows上,有一个Windows的System::IO::Ports的GetPortNames(),也许一个类似
System::IO::Ports
的GetPortNames()
,也许一个类似的API调用将是最理想的
更新:
因此,在收到答案并使用这些信息了解更多关于在linux上与串行端口交互的信息后,我最终找到了一种很好的方法来实现这种效果,即遍历可用端口。它不像一行命令那么简单,但是它可以工作,所以我觉得它很好。我在/sys/class/tty目录中找到了这种迭代/排序方法,作为对另一个问题的回答(我使用的代码的作者名叫瑟伦·霍姆),您可以看看这一点。两种简单的可能性:
/dev/ttyS*
上看到它们。usb设备创建的串行端口位于/dev/ttyUSB*
中。这将把您的问题简化为直接的迭代/sys
下面。在/sys/bus/serio/devices
下面,您可以找到这些设备关于可能性#1下列出的dirent迭代,/dev目录包含更多的文件,并非所有文件都是串行端口,因此我设想,通过迭代这些文件并返回目录中的所有条目,我需要以某种方式筛选这些文件并找到真正的串行端口。在我对文件进行迭代之后,我将如何通过编程来确定文件的性质?经过一些搜索,我实际上找到了一个解决方案,作为进行迭代的一种方法(我将为最终可能遇到这个问题的任何人更新上面的问题)。感谢您为我指明了正确的方向,我将此标记为correct是的,但不太多,而且/dev也是一个虚拟文件系统,大约十年来,因此您可以非常快速地阅读其内容。好吧,你不必担心你可能错过了一个串行设备,或者你打开了一个非串行设备,尽管这是可能的(你可以简单地将它们重命名/删除为root),但我一生中从未遇到过这样的情况。但是,如果你想100%确定,那么你可以尝试调用一个只读
ioctl()
仅在串行端口上可用。例如,询问他们的比特率或数据停止奇偶校验设置。如果它返回错误,则它不是串行设备。我怀疑,您甚至可以在大约20行代码中重新实现GetPortNames()
调用。