#delphi #freepascal #lazarus
#delphi #freepascal #lazarus
Вопрос:
Я действительно новичок в Lazarus / FreePascal, и у меня нет предыдущего опыта работы с Delphi. Я хочу иметь возможность получать информацию о версии ОС и типе учетной записи пользователя как в Windows, так и в Linux. Я видел, что существует системный API Windows, но не смог найти ничего подобного для Linux.
Существует ли системный API Linux для Lazarus / FreePascal, и если да, то как я могу его использовать?
Комментарии:
1. В Linux вам нужно будет вызвать
libc
. Я не имею ни малейшего представления, предоставляют ли библиотеки FPC это для вас. Я бы надеялся и ожидал, что они это сделают.2. Тем не менее, вы не хотите использовать модуль «libc» во freepascal, поскольку он обесценился.
Ответ №1:
В Linux нет такой единой точки, для которой вы могли бы написать один заголовок, а затем продолжать его использовать. Более того, поскольку многие части Linux имеют независимые версии, единой версии не существует.
При этом версию ядра можно получить через baseunix.fpuname(). Версия дистрибутива сложна, поскольку каждый дистрибутив хранит информацию о своей версии по-разному.
Первым шагом было бы определить необходимую вам информацию и приблизительное представление о том, где ее получить (например, системные библиотеки, такие как libc, дополнительная информация, такая как sysctl и / proc, и позволяют ли системы более высокого уровня на настольных системах запрашивать такую информацию, например, через DBUS). Эти ссылки не всегда будут в Pascal. Затем задайте конкретные вопросы здесь или на форумах / рассылках Lazarus.
Но не существует функциональности, подобной WMI, которая всегда работала бы и была бы довольно инвариантной. Linux была и остается операционной системой для взлома и настройки, разделенной на отдельные дистрибутивы с небольшим количеством жестких дисков. DBUS и HAL двигались в этом направлении, но изменение версий и переход на новую библиотеку сделали этот маршрут менее универсальным.
Комментарии:
1. Однако есть LSB, такие инструменты, как «lsb_release», существуют по крайней мере в некоторых дистрибутивах.
2. Безусловно, есть способы, но все они требуют тяжелой работы. Суть сообщения в том, что это будет сложнее, чем Windows, и не будет одноразовым усилием. Для каждого дополнительного атрибута может потребоваться работа. Сначала долго и упорно думайте о своих требованиях.
Ответ №2:
- Существует модуль «Unix», вы можете проверить, есть ли там то, что вы хотите.
Я хочу иметь возможность получать информацию о версии ОС
Что именно это означает? Вы можете использовать вывод «uname -a» (вызывается из TProcess), в зависимости от ваших потребностей. Существуют также файлы, такие как /etc / redhat-release и т.д., Но они могут отличаться в зависимости от дистрибутива.
и тип учетной записи пользователя как в Windows, так и в Linux.
Вероятно, в Unix вы хотите видеть, в каких группах находится пользователь. (Это можно сделать различными способами).
Я видел, что существует системный API Windows, но не смог найти ничего подобного для Linux.
Linux, как правило, придерживается подхода «Все в файле», поэтому где-то обычно есть файл (или псевдофайл), который вы можете прочитать с нужной информацией. В целом, Unix более гибкая, чем Windows. Например, в Windows, вероятно, есть вызов API для получения количества процессоров или скорости в МГц. В Linux вы можете заглянуть в /dev/cpuinfo и проанализировать эту информацию в виде текстового файла.
Существуют различные версии Unix и даже в Linux различные дистрибутивы. Вы, конечно, можете сузить область того, что вы хотите сделать, поддерживая пока только определенные дистрибутивы.