我需要获取标题中的信息。我对以下变量进行了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 ++获取此功能的任何想法?
由于
答案 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
。