最近项目需要判断mac系统是否低于10.15.但是一直不知道怎么获取,这次记录一下获取方式。
首先Qt当中有一个QSysInfo类,按道理是可以获取到系统版本的。但是我们看下面这个函数,它的返回值MacVersion是一个枚举,这个枚举最多能获取到10.12的系,显然不符合我们的要求。
所以,我们只有另辟蹊径,幸好在mac下有utsname,它可以获取到一个和系统版本号有极大关联的一个称之为Darwin kernel的版本。简单来说Darwin是OS X的一个组件,是操作系统的类 UNIX 核心,本身由内核(kernel)、XNU(“X is Not UNIX”的缩写,这
个缩写类似于 GNU 的递归式缩写)和运行时组成。
它的版本关系和系统版本有以下关系:If (OSX.version == 10.x.y) Darwin.version = (4+x).y
所以获取到Darwin的版本就变相获取到了系统版本
#include <sys/utsname.h>
int uname(struct utsname *name);
#define _SYS_NAMELEN 256
struct utsname {
char sysname[_SYS_NAMELEN]; /* [XSI] Name of OS */
char nodename[_SYS_NAMELEN]; /* [XSI] Name of this network node */
char release[_SYS_NAMELEN]; /* [XSI] Release level */
char version[_SYS_NAMELEN]; /* [XSI] Version level */
char machine[_SYS_NAMELEN]; /* [XSI] Hardware type */
};