我正在开发一个串口库,我正在考虑使用字符设备的主要/次要模式来检查给定文件是平台串口、pty还是usb串口,以补充使用Linux或OSX下存在的其他框架。
实际上,为了确定文件是USB串口还是平台串口,可以使用可用的框架,比如linux上的libudev或OSX上的IOKit。但是我认为检查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上发现,PTS chardev都有一个主要的136模式,而在我的OSX上,所有PTS都有一个16模式。在ddg上爬行时,我发现Solaris可能使用主要的24.模式
我可以在网上找到很多关于PTY/PTS及其历史的资源。开瓶、帕蒂或普洛斯的命令--尽管给出了/dev/ptmx的大写和副词--不讨论PTS设备的主要/次要模式。也没有列出主要模式的资源。
以下是我的问题:
PTS的主要模式(以及其他串行chardev)是否稳定?(我在寻找稳定在±2年的东西)注:我对在unix.SE上发帖犹豫不决,但由于我是在代码中使用它,所以我认为这更应该在这里提出。
编辑:我发布了一个相关的关于unix.SE的问题,请求帮助查找其他主要模式,并查看它们在系统中的稳定性。我的猜测是,如果没有人有答案,至少我们可以查询系统并查看来源。
发布于 2014-10-28 22:08:58
主设备号和次要设备号是根据所涉及的硬件在编译或链接/加载时定义的。向Solaris机器添加额外的SBUS卡可能(必须?)有一个任意的主要设备编号。我知道是我的。
简而言之,我不认为大大小小的设备号码会做你想做的事。
考虑一下Debian端口https://www.debian.org/ports
我无法想象SPARC、s390、MIPS、PowerPC和ARM架构都使用相同的大小写;总线架构太不一样了。
https://stackoverflow.com/questions/23373938
复制相似问题