使用Lazarus和FreePascal获取Linux系统信息

7

我对Lazarus/FreePascal非常陌生,以前也没有Delphi经验。我想要获取Windows和Linux下的操作系统版本信息和用户账户类型。我发现有Windows系统API,但是没有找到类似的Linux API。

是否有适用于Lazarus/FreePascal的Linux系统API?如果有,该如何使用?


在Linux上,您需要调用libc。我不知道FPC库是否为您包装了它。我希望并期望他们这样做。 - David Heffernan
然而,您不希望在FreePascal中使用“libc”单元,因为它已经过时。 - Noah
2个回答

4

在Linux上,并不存在一个统一的点,可以编写一个头文件并一直使用它。此外,由于Linux的许多部分是独立版本的,所以也没有单个版本的概念。

话虽如此,内核版本可以通过baseunix.fpuname()获得。发行版版本很难确定,因为每个发行版都以不同的方式存储其版本信息。

第一步是确定您需要的信息,以及大致了解获取该信息的位置(例如,系统库,如libc,附加信息,如sysctl和/proc,以及如果桌面系统上的高级系统允许查询此类信息,例如通过DBUS)。这些参考资料并不总是用Pascal编写的。然后在这里或Lazarus论坛/邮件列表上提出具体问题。

但是,并不存在像WMI那样始终有效且相当不变的功能。 Linux仍然是一个黑客和微调器操作系统,分散成几个有限的发行版,缺乏坚实的安全性。 DBUS和HAL正在朝着这个方向发展,但版本问题和转向新库使得这条路不太普遍。


有LSB,但是像“lsb_release”这样的工具至少在某些发行版上存在。 - Jens Mühlenhoff
当然有方法,但它们都需要艰苦的努力。信息的重点是它会比Windows更难,并且不会是一次性的努力。对于每个额外的属性,可能都需要付出努力。首先要仔细思考您的需求。 - Marco van de Voort

1
  1. 有一个“Unix”单元,您可以检查您想要的是否在其中。

我想能够获取操作系统版本信息

这是什么意思?您可以根据需要使用“uname -a”的输出(从TProcess调用)。还有像/etc/redhat-release等文件,但它们可能因发行版而异。

以及Windows和Linux上的用户帐户类型。

在Unix中,您可能想要查看用户所在的组。(有各种方法可以做到这一点)。

我看到有一个Windows系统API,但找不到类似的东西适用于Linux。

Linux倾向于遵循“一切皆为文件”的方法,因此通常会有一个文件(或伪文件),您可以读取其中包含您想要的信息。总的来说,Unix比Windows更灵活。例如,在Windows中,可能有一个API调用来获取处理器数量或以Mhz为单位的速度。在Linux中,您可以查看/dev/cpuinfo并将该信息解析为文本文件。

Unix 有各种不同的版本,在 Linux 中,也有各种不同的发行版。当然,您可以通过仅支持目前特定的某些发行版来限制您想要做的范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接