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

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

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

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

Сообщение stikriz11 » 22.12.2023 18:21:15

Снег Север писал(а):Как можно не знать что такое системные вызовы (syscall), это же база? И это даже не про линукс...

Всю жизнь писал программы под Windows - никогда не было нужно. Просто никогда. Ну, разберемся, если никак без этого невозможно просто в Linux. Такая особенность, х.з. пока ничего по этому поводу сказать не могу.
Последний раз "по настоящему" писал на ASM на Z-80 для синклера. Для Windows только простые вставки когда очень было надо, например вызвать что-то из БИОС. Понятно, что было это давно.
stikriz11
постоялец
 
Сообщения: 126
Зарегистрирован: 04.09.2023 15:54:19

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

Сообщение xchgeaxeax » 22.12.2023 19:33:46

sts писал(а):т.е. GetEnvironmentVariable все таки работает верно

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

Добавлено спустя 2 минуты 21 секунду:
stikriz11 писал(а):Всю жизнь писал программы под Windows - никогда не было нужно.

В Windows тоже есть такие точки входа в ядро, но они все спрятаны в тонне библиотечных функций. Тот же эффект достигается в linux при использовании библиотеки glibc, там тоже есть все функции переадресации вызовов в ядро через команду syscall.
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

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

Сообщение WAYFARER » 22.12.2023 23:33:42

stikriz11 писал(а):Ну, разберемся, если никак без этого невозможно просто в Linux.

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

Просто прислушайся к xchgeaxeax. Особо много разбираться не обязательно.
в fp есть все что нужно что бы работать с ядром.
Код: Выделить всё
uses syscall;
begin
Do_SysCall(...);
end.

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

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


ps. Ну и да, еще есть glibc (с прекраснейшей документацией)
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

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

Сообщение Снег Север » 23.12.2023 07:21:45

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

Петросян завистливо курит в уголке.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение stikriz11 » 23.12.2023 09:14:34

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'];
И далее по количеству параметров. Ну, я бы точно сделал оболочку вокруг. Пойду поищу.
stikriz11
постоялец
 
Сообщения: 126
Зарегистрирован: 04.09.2023 15:54:19

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

Сообщение Дож » 23.12.2023 09:53:39

stikriz11 писал(а):Добавлено спустя 2 минуты 32 секунды:
WAYFARER писал(а):где Native API толком не документирован

Как рождается такое в голове? Я уже сомневаюсь, что Вы что-то полезное можете в принципе сообщить. Все равно почему. Просто не знаете и бредите наяву или потому, что не хотите. Вызовы у Вас объявлены в модуле с константами, WinApi не документировано...

Вы спутали Native API и WinApi. Native API не документировано.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Снег Север » 23.12.2023 11:09:31

Native API на то и Native, что оно не предназначено для использования в прикладном ПО, оно только для самих разработчиков.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение Alexander » 23.12.2023 12:03:17

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

Спектрум жив: https://www.specnext.com/product/zx-spe ... -computer/. И его пользователи всё ещё ждут те разработки под свободной лицензией на github'е.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

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

Сообщение stikriz11 » 23.12.2023 13:02:45

Дож писал(а):Вы спутали Native API и WinApi. Native API не документировано

Да. И слава Богу, что настолько не знаю, что не подозревал даже) Разработчику приложений такое не надо, даже вредно.
stikriz11
постоялец
 
Сообщения: 126
Зарегистрирован: 04.09.2023 15:54:19

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

Сообщение sts » 23.12.2023 13:42:21

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 секунды:
для понимания вопроса вам тут поможет какая нибудь лекция пр переменным окружения, откуда они взялись и для чего
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение WAYFARER » 23.12.2023 14:12:07

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.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

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

Сообщение Снег Север » 23.12.2023 14:30:03

WAYFARER писал(а):Когда возникает необходимость это становится проблемой

Только у вирусописателей.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение svk12 » 23.12.2023 14:39:58

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

Ну лично я разрабатываю кроссплатформные приложения на FPC/Lazarus. Работаю на Линуксе(он мне удобней), копирую на Винду и там собираю той же версией FPC/Lazarus. Явные вызовы какого-либо API обычно не требуются.
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

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

Сообщение xchgeaxeax » 23.12.2023 16:57:18

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.
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

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

Сообщение sts » 23.12.2023 17:30:28

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

вы говорите что она работает неправильно при этом ссылаетесь на пример в виде вашей тестовой программы который говорит что она работает правильно.
повторяю, то что она возвращает неверное значение это никак не говорит что она работает неправильно, это демонстрирует что значит работать правильно для нее, а вы от нее ожидаете того чего она не должна делать, все таки поинтересуйтесь что такое параметры окружения
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 0

Рейтинг@Mail.ru
cron