比较来自世界各地的卖家的域名和 IT 服务价格

决定 OS 在执行期间

我们 ISO C, 我们 POSIX 不要提供功能以确定基本 OS 在执行期间。 从理论的角度来看,这无关紧要,因为 C 为最常见的系统挑战提供包装,以及选择 nit-picking 甚至不



基本的 OS.

但是,在许多真实场景​​中,它证明了解主机环境的有用 C 例如,我准备分享,找出存储配置文件或如何调用的位置
select//

, 所以:

写入的应用程序是否有类似的方法 C, 确定基本 OS 在执行期间?

至少如果我可以轻松选择 Linux, Windows, BSD 和 MacOS?

我目前的假设是 , 检查某些 files/directories,, 如
C:\

或者
/

, 但这种方法似乎不可靠。 也许关于许多这些来源的调查将有助于建立一个概念。 "OS 指纹", 从而提高了可靠性。 无论如何,我期待着您的建议。
已邀请:

诸葛浮云

赞同来自:

事实上,大多数系统都有一个团队
uname

, 显示当前 kernel 正在使用。 在 Mac OS, 这通常是 "Darwin", 在 Linux 这很简单 "Linux", "ERROR" 在 Windows 这是我 FreeBSD 返回 "FreeBSD".

http://en.wikipedia.org/wiki/Uname
uname


我几乎确定有一个等价物 C 为了
uname

, 所以你不需要
system//

冰洋

赞同来自:

IF

你在系统中 POSIX, 你可以打电话 uname// 的
<sys utsname.h="">

.

这显然不是 100% 便携式,但我认为不会有任何方法可以在执行期间提供它。

阅读更多
http://www.unix.com/man-page/P ... me.h/
</sys>

三叔

赞同来自:

运行时不是时间来确定这个,因为没有 Epic kludges 一个平台的二进制文件将无法在另一个平台上工作,您应该只使用
#ifdef

s 对平台敏感的代码。

冰洋

赞同来自:

已接受的回复阅读
uname

, 但没有给出最低工作的例子,这样它就是为了每个人都感兴趣,我希望它能拯救你带我的时间:


#include <stdio.h>
#include <stdlib.h>
#include <sys utsname.h="">

int main/void/ {
struct utsname buffer;
if /uname/&amp;buffer/ != 0/ {
perror/"uname"/;
exit/0/;
}
printf/"OS: %s\n", buffer.sysname/;

return 0;
}


/可能的/ 出口:

OS: Linux

PS: 不幸的是,这个标题在这里使用。 POSIX:
https://coderoad.ru/5773281/
, 这很可能不起作用 Windows.
</sys></stdlib.h></stdio.h>

八刀丁二

赞同来自:

if /strchr/getenv/"PATH"/,'\\'//
puts/"You may be on windows..."/;


甚至同意这一事实 "Runtime isn't the time to determine this..."

要回复问题请先登录注册