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

标签 c macros linux-distro

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

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

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

#if defined(__linux__)
   #define os_platform THISisLINUX

它可以是任何类型的 Linux,例如 Ubuntu 和类似的 Linux。 Kali Linux 的宏是什么?

最佳答案

发行版没有宏。您只能通过在 /etc 中查找特定文件来进行“嗅探测试”以查看它是什么分布,即使这样它也可以被伪造。

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

/etc/redhat-release 之类的东西是特定于发行版的,因此请寻找类似的东西。虽然这不能作为 #ifdef 进行测试,但您需要将其放入 configure 脚本中。

关于c - 在编译时和/或运行时检测正在运行的 Linux 发行版?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823886/

相关文章:

c++ - 掩蔽和转移

macros - 是否可以只打印传递给 Scheme 宏的字符串?

c++ - c++ 可执行文件的不同 linux 发行版的问题

python - 如何剥离 Python 输出

在导致错误时使用 do 定义的 C++ 宏

python-3.x - 升级到 Ubuntu 20.04 后,python 3.7 venv 损坏

c - 链接到 QT 中构建的动态库时出现 LNK2019(无法解析的外部符号)

c - 使用 -pg 编译的 gcc 不会生成 gprof 所需的二进制文件

c - 如何限制 C 中的套接字速度?

scala - 使用 Scala 的宏来强制类型相等