【发布时间】:2014-04-29 19:48:47
【问题描述】:
我正在开发一个串口库,我正在考虑使用主要/次要模式 字符设备检查给定文件是否为平台串口, pty 或 USB 串行端口,以补充使用下存在的其他框架 Linux 或 OSX。
其实就是判断一个文件是USB串口还是平台串口
端口,有一些方法可以使用可用的框架,例如 linux 上的 libudev 或 IOKit
在 OSX 上。但我认为要检查PTY 文件,唯一的方法是使用旧的
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 的主要模式来检测这是什么类型的设备是个好主意吗?
N.B.:我一直犹豫是否要在 unix.SE 上发帖,但因为我正在使用它 在代码中,我认为这更像是一个要在这里问的问题。
编辑:我发布了一个相关的question on unix.SE 寻求帮助以查找其他主要模式,并查看它们在整个系统中的稳定性。我的猜测是,如果没有人知道答案,至少我们可以查询系统并查看来源。
【问题讨论】:
标签: c unix serial-port pty chardev