【问题标题】:UNIX - list all existing serial portsUNIX - 列出所有现有的串行端口
【发布时间】:2015-01-02 19:29:45
【问题描述】:

我正在编写一个 C 程序,它会自动登录到某个连接的 Linux 设备(通过串行端口)并读取其所有日志文件等。
所以问题来了:我不想将串行端口(在我的情况下是 /dev/ttyS0 )硬编码到我的代码中,而是在开始时给出某种提示,列出所有实际存在的 em> 设备,我可以从中选择并将其作为参数传递。
有没有办法区分 /dev 文件夹中的逻辑设备和物理设备?我不想在 /dev 文件夹中使用 ls 并显示所有(在我的情况下)不必要的信息;我只想显示实际存在的串口。

【问题讨论】:

  • 您可以在/proc/sys 目录中的某个位置找到它。
  • 问题可能与stackoverflow.com/a/9914339重复
  • 请考虑不要将用户限制在列表中的某个端口。对于某些应用程序,让您的程序在不是真正的串行端口的文件上运行可能会很有用。

标签: c unix terminal serial-port


【解决方案1】:

您可以通过读取目录/sys/class/tty/中的符号链接来枚举系统中的所有tty。

然后你可以读取type伪文件来检查它是真正的串口还是虚拟的。可能的值在<linux/serial.h>:

#define PORT_UNKNOWN    0
#define PORT_8250       1
#define PORT_16450      2
#define PORT_16550      3
#define PORT_16550A     4
#define PORT_CIRRUS     5       /* usurped by cyclades.c */
#define PORT_16650      6
#define PORT_16650V2    7
#define PORT_16750      8
#define PORT_STARTECH   9       /* usurped by cyclades.c */
#define PORT_16C950     10      /* Oxford Semiconductor */
#define PORT_16654      11
#define PORT_16850      12
#define PORT_RSA        13      /* RSA-DV II/S card */

大多数虚拟端口甚至没有type 文件。无论如何,0 可能意味着虚拟或模拟端口。

【讨论】:

  • 感谢您的回答,但是如何读取给定端口的类型伪文件?
  • @Buitenlander 您只需打开文件并阅读它,就像使用普通文件一样。你甚至可以通过cat查看内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多