如何在C / C ++中获取macOS的产品名称/版本(即获得" Mac OS"以及" 10.12.5")

时间:2017-06-21 18:08:21

标签: c macos operating-system version

我需要获取标题中的信息。我对以下变量进行了sysctl调用,它给了我其他(非常有用的)信息(通常关于内核而不是操作系统):KERN_VERSION,KERN_OSVERSION,KERN_TYPE,KERN_RELEASE。

我在这里查看了sw_vers命令的源代码:https://opensource.apple.com/source/DarwinTools/DarwinTools-1/sw_vers.c并试图实现他们所做的,但是当我能够包含我的计算机时无法找到,因此我想要#39}实施。当我浏览我的/ include /目录时,我无法找到/ CoreFoundation /所以我不知道我从哪里取出它。

关于如何使用C / C ++获取此功能的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

如果这是我的项目,我只需调用sw_vers实用程序并解析其输出。您可以使用popen来完成此操作,如下所示:

char buf[1024];
unsigned buflen = 0;
char line[256];
FILE *sw_vers = popen("sw_vers", "r");
while (fgets(line, sizeof(line), sw_vers) != NULL) {
    int l = snprintf(buf + buflen, sizeof(buf) - buflen, "%s", line);
    buflen += l;
    assert(buflen < sizeof(buf));
}
pclose(sw_vers);

解析输出以获取相关信息。在我的系统上,输出是:

ProductName:    Mac OS X
ProductVersion: 10.12.5
BuildVersion:   16F73

因此,您可以解析每一行而不是将其全部存储到缓冲区中,如图所示。

将信息存储在程序中后,可以缓存结果。同一程序将来的任何查询都可以使用缓存的结果,而不是再次调用sw_vers