在编译时和/或运行时检测正在运行的Linux发行版?

问题描述 投票:1回答:2

我正在Kali Linux中制作一个程序,我想让它只在Kali中运行。我可以用C来做,就像:

#if defined(_WIN32) || defined(_WIN64)
   #define os_platform THISisWINDOWS

为了检查用户的操作系统是否是Windows,以及稍后在脚本中检查定义的变量os_platform,但是我搜索谷歌和所有地方,但我找不到Kali Linux的宏。如果我做 :

#if defined(__linux__)
   #define os_platform THISisLINUX

它可以是任何类型的Linux,如Ubuntu,以及像这样的Linux。 Kali Linux的宏是什么?

c macros linux-distro
2个回答
2
投票

分发没有宏。您只能通过在/etc中查找特定文件来进行“嗅探测试”以查看它的分布情况,即便如此,它也可以伪造。

首先存在宏的原因是因为Linux与BSD和Windows完全不同,所以它是必要的区别。 Kali和Debian之间的区别非常主观,Kali基于Debian。就编译器而言,大多数Linux发行版实际上非常相似,因为它们都使用相同的内核和头文件。

/etc/redhat-release这样的东西是分布特定的,所以寻找类似的东西。这不能作为#ifdef测试,但是你需要在你的configure脚本中加入。


0
投票

您可以检查/etc/issue文件以获取特定的发行版名称,然后使用文件指针提取确切的名称然后比较如果它是Ubuntu或Kali或任何其他Linux机器。

© www.soinside.com 2019 - 2024. All rights reserved.