我正在研究串口库,我正在考虑使用主/次模式 检查给定文件是否为平台串口的字符设备,a pty或usb串口,补充使用其他框架 Linux或OSX。
实际上,用于查明文件是USB串口还是平台串口
port,有一些方法可以使用可用的框架,比如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的联合页面 - 尽管那个主页和unix.SE
未成年人/dev/ptmx
- 请勿谈论PTS
设备的主要/次要模式。和不
资源列出了统一的主要模式。
所以这是我的问题:
PTS
(以及扩展名为其他串行chardev)的主要模式吗? (我正在寻找稳定在±2年的东西)N.B。:我在question on unix.SE上发帖时犹豫不决,但因为我正在使用它 在代码中,我认为这更像是一个问题,在SO。
编辑:我发布了一个相关的{{3}},寻求帮助查找其他主要模式,看看它们在整个系统中的稳定性。我的猜测是,如果没有人有答案,至少我们可以查询系统并查看来源。
答案 0 :(得分:0)
主要和次要设备编号在编译或链接/加载时定义,具体取决于所涉及的硬件。将附加的SBUS卡添加到Solaris计算机可能(必须?)具有任意主设备号。我知道我的确如此
简而言之,我不认为主要/次要设备数量会做你想要的
考虑Debian Linux Ports https://www.debian.org/ports
我无法想象SPARC,s390,MIPS,PowerPC和ARM架构都使用相同的主要/次要数字;总线架构太不同了。