【发布时间】:2017-11-24 18:46:01
【问题描述】:
我需要获取标题中的信息。我对以下变量进行了 sysctl 调用,它给了我其他(无用)信息(通常与内核而非操作系统有关):KERN_VERSION、KERN_OSVERSION、KERN_TYPE、KERN_RELEASE。
我在这里查看了命令sw_vers 的源代码:https://opensource.apple.com/source/DarwinTools/DarwinTools-1/sw_vers.c 并尝试实现他们所做的,但是当我能够包含我的计算机时无法找到,因此我无法实现。当我查看我的 /include/ 目录时,我根本找不到 /CoreFoundation/ 所以我不知道我从哪里拉它。
关于如何使用 C/C++ 实现这一点的任何想法?
谢谢
【问题讨论】:
-
你没有做太多的研究,是吗?我在 30 秒内用 1 次谷歌搜索发现 KERN_VERSION 是在 sys/sysctl.h 中定义的。也许使用在同一个标题中定义的
sysctl_rdstring会让你到达某个地方。 -
请注意,10.12.5 是 macOS Sierra 的一个版本——macOS 部分的大小写不同。
-
@MichaëlRoy:我认为你错过了重点——OP 知道这些,但他们没有提供想要的答案。
-
你引用的开源存储库有这个目录:opensource.apple.com/source/CF,它似乎包含 CoreFoundation 源代码。执行
sw_vers并解析其输出不是一个选项吗? -
可以做到——
sw_vers程序证明了它可以做到。不太清楚的是sw_vers程序在做什么。它在询问什么信息来查找信息。如果你发现它涉及到使用一些 Objective-C 代码,那可以接受吗?我注意到man sw_vers表明您可以使用一个选项调用它,以获取任何没有标签前缀的字段(sw_vers -productName— 单破折号)。它还提到了文件/System/Library/CoreServices/SystemVersion.plist和/System/Library/CoreServices/ServerVersion.plist——这有帮助吗?
标签: c macos operating-system version