我正在开发一个串口库,我正在考虑使用字符设备的主要/次要模式来检查给定的文件是平台串口,pty还是usb串口,以补充使用其他Linux 或 OSX 下存在的框架。
实际上,要确定文件是 USB 串口还是平台串口,有一些方法可以使用可用的框架,例如libudev
在 linux 或IOKit
OSX 上。但我认为要检查PTY
文件,唯一的方法是使用 good old
stat()
:
#if defined(OS_LINUX)
#define PTY_MAJOR_NODE 136
#elif defined(OS_MAC)
#define PTY_MAJOR_NODE 16
#elif defined(OS_SOLARIS)
#define PTY_MAJOR_NODE 24
#endif
bool is_pty(const char* file) {
struct stat filestat;
if (0 == stat(file, &filestat)
&& S_ISCHR(filestat.st_mode)
&& major(filestat.st_rdev) == PTY_MAJOR_NODE) {
return true;
}
return false;
}
到目前为止,我在我的 debian linux 上发现PTS
chardev 的主要模式都是 .
136
,而在我的 OSX 上,所有 PTS 的模式都是16
. 在ddg上爬,我发现Solaris可能使用主要模式24.
我可以在网上找到很多关于 PTY/PTS 及其历史的资源。openpty、pty或pts的联机帮助页- 尽管给出了主要和次要的/dev/ptmx
- 没有谈论PTS
设备的主要/次要模式。并且没有资源列出跨单元的主要模式。
所以这是我的问题:
- 对于给定的 Unix 风格,主要模式
PTS
(以及扩展的其他串行 chardev)是否稳定?(我正在寻找稳定在±2年的东西) - 那些定义在哪里?我想这是一个处理这个问题的内核驱动程序,不是吗?
- 依靠 chardev 的主要模式来检测这是什么设备是个好主意吗?
注意:我一直犹豫在unix.SE上发帖,但由于我在代码中使用它,我认为这更像是一个在这里问的问题,关于 SO。
编辑:我在 unix.SE 上发布了一个相关问题,寻求帮助以查找其他主要模式,并查看它们在整个系统中的稳定性。我的猜测是,如果没有人有答案,至少我们可以查询系统并查看来源。