Как искать API в Linux

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

Снег Север писал(а):Как можно не знать что такое системные вызовы (syscall), это же база? И это даже не про линукс...
Всю жизнь писал программы под Windows - никогда не было нужно. Просто никогда. Ну, разберемся, если никак без этого невозможно просто в Linux. Такая особенность, х.з. пока ничего по этому поводу сказать не могу.
Последний раз "по настоящему" писал на ASM на Z-80 для синклера. Для Windows только простые вставки когда очень было надо, например вызвать что-то из БИОС. Понятно, что было это давно.
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

sts писал(а):т.е. GetEnvironmentVariable все таки работает верно
Нет. Она лишь передаёт программе некоторое значение, а вот достоверность значения не подтверждается.

Добавлено спустя 2 минуты 21 секунду:
stikriz11 писал(а):Всю жизнь писал программы под Windows - никогда не было нужно.
В Windows тоже есть такие точки входа в ядро, но они все спрятаны в тонне библиотечных функций. Тот же эффект достигается в linux при использовании библиотеки glibc, там тоже есть все функции переадресации вызовов в ядро через команду syscall.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

stikriz11 писал(а):Ну, разберемся, если никак без этого невозможно просто в Linux.
Так в любой системе разбираться нужно. Хотя бы базовые знания нужны для понимания как оно вообще работает.
Не знаю как, но что вы, что Снег Сервер, вы ведь все это на протяжении десятилетий используете в Windows, видимо каким то методом научного тыка, не понимая как оно работает...

Просто прислушайся к xchgeaxeax. Особо много разбираться не обязательно.
в fp есть все что нужно что бы работать с ядром.

Код: Выделить всё

uses syscall;
begin
 Do_SysCall(...);
end.
Большая часть системных вызовов есть в rtl в файле sysnr.inc
Полные таблицы есть в гитхабе Торвальдса, для всех существующих архитектур.
Вот это все +ссылки на документацию что даны выше. Этого достаточно.

И это все не сложно, в отличии от Windows, где Native API толком не документирован и все раскидано по куче библиотек...


ps. Ну и да, еще есть glibc (с прекраснейшей документацией)
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

WAYFARER писал(а):И это все не сложно, в отличии от Windows, где Native API толком не документирован и все раскидано по куче библиотек...
Петросян завистливо курит в уголке.
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

WAYFARER писал(а):вы ведь все это на протяжении десятилетий используете в Windows, видимо каким то методом научного тыка, не понимая как оно работает...
Вот тут Вы демонстрируете свое невежество. У меня есть API в DLL. Это все что нужно. Windows запрещает мне, если я не дрова пишу, обращаться в ядро напрямую. Это мне нравится.

Добавлено спустя 4 минуты 54 секунды:
xchgeaxeax писал(а):Тот же эффект достигается в linux при использовании библиотеки glibc, там тоже есть все функции переадресации вызовов в ядро через команду syscall.
Видимо, это именно то, что нужно.
В досе помню, чтобы узнать положение мышкиного курсора, надо было воид функцию с каким-то необычным параметром создать и вызвать прерывание. Могу напутать - это реально было давно, в 94 - 96 годах. Неужели что-то подобное обязательно надо вытворять в Linux регулярно? И все таким занимаются? ))) Извините, я, видимо, похож на проходимца в трусах посреди нудистского пляжа.

Добавлено спустя 13 минут 14 секунд:
WAYFARER писал(а):Большая часть системных вызовов есть в rtl в файле sysnr.inc
Вы сами этот файл видели? Там объявлены константы. Вызовов нет.

Добавлено спустя 1 минуту 3 секунды:
WAYFARER писал(а):И это все не сложно, в отличии от Windows
Код на паскале или чем там вызова можно увидеть?

Добавлено спустя 2 минуты 32 секунды:
WAYFARER писал(а):где Native API толком не документирован
Как рождается такое в голове? Я уже сомневаюсь, что Вы что-то полезное можете в принципе сообщить. Все равно почему. Просто не знаете и бредите наяву или потому, что не хотите. Вызовы у Вас объявлены в модуле с константами, WinApi не документировано... Наверное, Вас пойду и забаню.

Добавлено спустя 11 минут 50 секунд:
Увидел вот такое:
function FpSysCall(sysnr:TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL0'];
И далее по количеству параметров. Ну, я бы точно сделал оболочку вокруг. Пойду поищу.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

stikriz11 писал(а): Добавлено спустя 2 минуты 32 секунды:
WAYFARER писал(а):где Native API толком не документирован
Как рождается такое в голове? Я уже сомневаюсь, что Вы что-то полезное можете в принципе сообщить. Все равно почему. Просто не знаете и бредите наяву или потому, что не хотите. Вызовы у Вас объявлены в модуле с константами, WinApi не документировано...
Вы спутали Native API и WinApi. Native API не документировано.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Native API на то и Native, что оно не предназначено для использования в прикладном ПО, оно только для самих разработчиков.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

> Последний раз "по настоящему" писал на ASM на Z-80 для синклера

Спектрум жив: https://www.specnext.com/product/zx-spe ... -computer/. И его пользователи всё ещё ждут те разработки под свободной лицензией на github'е.
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

Дож писал(а):Вы спутали Native API и WinApi. Native API не документировано
Да. И слава Богу, что настолько не знаю, что не подозревал даже) Разработчику приложений такое не надо, даже вредно.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

xchgeaxeax писал(а):Нет. Она лишь передаёт программе некоторое значение, а вот достоверность значения не подтверждается.
а она и не должна ничего подтверждать, ее работа передать имеющееся значение без каких либо изменений.
кажется я понял, вы просто приписываете функции GetEnvironmentVariable свойства которыми она по вашему мнению должна обладать, просто потому что дословно читаете ее название, т.е. банально не понимаете для чего она. нет ее название никак не связано неким абстрактно глобальным Environment, это узко специализированная функция задача которой вернуть то что установлено командой set (если про винду) в экземпляре консоли и переданной (унаследованную) в запущенную программу, она (функция) никак не связана с какими либо настройками системы.

Добавлено спустя 6 минут 11 секунд:
GetEnvironmentVariable function (winbase.h)

Retrieves the contents of the specified variable from the environment block of the calling process.

Remarks

This function can retrieve either a system environment variable or a user environment variable.
вот и все что она делает.
так как апи винды первично для фпцлазарус то максимально его повторяет под линухом

Добавлено спустя 12 минут 22 секунды:
для понимания вопроса вам тут поможет какая нибудь лекция пр переменным окружения, откуда они взялись и для чего
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

stikriz11 писал(а):Вы сами этот файл видели? Там объявлены константы. Вызовов нет.
stikriz11 писал(а):Вызовы у Вас объявлены в модуле с константами.
ППц. В этом файле написано что это за константы:

Код: Выделить всё

{
* This file contains the system call numbers.
}  
а интерфейсом в данном случае будет функция syscall (do_syscall в fp)
Так же я тебе сказал где взять полные таблицы (даже не попытался загуглить что это такое, верно?)
stikriz11 писал(а):WinApi не документировано.
Я говорил именно о Native API

Снег Север писал(а):Native API на то и Native, что оно не предназначено для использования в прикладном ПО, оно только для самих разработчиков.
В том то и дело, что не прикладным единым. Когда возникает необходимость это становится проблемой и поиск решений занимает зачастую неприлично много времени.
А в Linux все открыто и задокументировано, по этому да, действительно проще.
stikriz11 писал(а):В досе помню, чтобы узнать положение мышкиного курсора, надо было воид функцию с каким-то необычным параметром создать и вызвать прерывание. Могу напутать - это реально было давно, в 94 - 96 годах. Неужели что-то подобное обязательно надо вытворять в Linux регулярно? И все таким занимаются?
Нет, никто этим не занимается))) А в рамках прикладного программирования в fpc/lazarus так и вообще в большинстве случаев почти ничем не отличается от программирования в Windows.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

WAYFARER писал(а):Когда возникает необходимость это становится проблемой
Только у вирусописателей.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

stikriz11 писал(а):Неужели что-то подобное обязательно надо вытворять в Linux регулярно? И все таким занимаются?
Ну лично я разрабатываю кроссплатформные приложения на FPC/Lazarus. Работаю на Линуксе(он мне удобней), копирую на Винду и там собираю той же версией FPC/Lazarus. Явные вызовы какого-либо API обычно не требуются.
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

stikriz11 писал(а):Неужели что-то подобное обязательно надо вытворять в Linux регулярно?
Нет. Таким заниматься не нужно. Обрабатывать напрямую аппаратные прерываниями из пользовательского режима вам никто не позволит.

Но вот в Windows тоже есть прерывание для доступа к ядру. Кажется int 49 (уже не помню и могу напутать). Вот только интерфейс этого прерывания не документирован. Документированы только API функции из DLL.

Вот эти ваши ощущения, что должно быть 100500 различных документированных функций связанных с ОС как раз идет из Windows. Там вам не дают свободы выбора. Есть только официальный оконный менеджер и официальная структура программного интерфейса.
Linux же максимально простая в этом плане ОС. Все что вам нужно реализовано на уровне ядра и чисто ядро работает только как управляющий код и средство взаимодействия пользовательских процессов. Для этого не надо много функций. Все они реализуются в системных вызовах.
Но вот остальные функции это уже целиком и полностью часть соответствующих пакетов расширения. Например, для графического интерфейса (X11) запускается пользовательский процесс отвечающий за создание и управление окнами. Функции взаимодействия с этим процессом реализованы уже в его .so библиотеке и документированы для неё. Но вместе с этим процессом есть так же процесс - оконный менеджер (GNOME, KDE, xfce, mate итд), который так же привносит свои дополнительные функции для управления окнами (темы, рабочий стол и настройки).
То что вы привыкли считать единым в Windows в Linux разбито на несколько независимых частей.

ADD: Т.е. то, что вы привыкли видеть как функции библиотеки GDI32.DLL, в Linux это X11. А функции библиотеки USER32.DLL это функции оконного менеджера. Системные вызовы же это часть относящаяся к функциям KERNEL32.DLL. Если совсем упростить и приблизительно попробовать сопоставить.
stikriz11 писал(а):Вы сами этот файл видели?
Я же уже объяснил кто такое системный вызов. Для него не надо ничего кроме набора соответствующих констант. Этот файл вполне полный.
sts писал(а):кажется я понял, вы просто приписываете функции GetEnvironmentVariable свойства которыми она по вашему мнению должна обладать, просто потому что дословно читаете ее название
Посмотрите на скриншоты в предыдущих постах. Я вам там уже все пояснил. И даже рассказал про особенности environ связанные с их расположением.

А применительно к передаче параметра HOSTNAME через переменные окружения - это не подходит т.к. пользователь может изменить hostname через вызов соответствующего системного вызова в одном из пользовательских процессов. А программа использующая копию этого значения в переменных окружения этого не увидит и продолжит работать со старым значением. И пользователь будет долго тупить почему он имя поменял, а в вашей программе оно все равно старое. И даже перезапуск не помогает, потому что надо не просто перезапустить ваш программу, но и оболочки из которой она запускается.
Снег Север писал(а):Только у вирусописателей.
А ещё у безопасников и антивирусописателей. Ещё у разработчиков оборудования и всяких разных сервисов, которые должны работать, скажем, с RAID массивами или другой функцией, о которой Windows ничего не известно.

Разумеется скриптописателям на html максимум что нужно это WinAPI.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

xchgeaxeax писал(а):Посмотрите на скриншоты в предыдущих постах. Я вам там уже все пояснил. И даже рассказал про особенности environ связанные с их расположением.
вы говорите что она работает неправильно при этом ссылаетесь на пример в виде вашей тестовой программы который говорит что она работает правильно.
повторяю, то что она возвращает неверное значение это никак не говорит что она работает неправильно, это демонстрирует что значит работать правильно для нее, а вы от нее ожидаете того чего она не должна делать, все таки поинтересуйтесь что такое параметры окружения
Ответить