Меню Рубрики

Аналог winapi в linux

Аналог WinAPI в Linux

Возник вопрос, где можно прочитать про функции операционной системы для Linux. Т.е. аналог описание WinAPI в Platform SDK.

Qt & GTK это GUI, а если вас интересует System Calls, то google.com -> LInux system calls

Насчет Qt – это как минимум фейл, а в комплекте с GTK+ идет Glib и Gdk, так чта по этому поводу тоже фейл.

Какой такой фейл ещё ? Вы вопрос видите ? Аналог WINAPI для LInux называется System Calls, а уж точне не QT и не GTK.

>Вы вопрос видите ? Аналог WINAPI для LInux называется System Calls

1) Аналога Win32 Api в линуксе нет. 2) NT Kernel API – это не Win32 API 3) Qt это не только GUI, но еще и ввод-вывод, сеть, БД, контейнеры, IPC итд, итп. все те возможности которые предоставляет Win32 API.

Пожалуй, тоже ввяжусь в спор. Человек спрашивает:”где можно прочитать про функции операционной системы для Linux. Т.е. аналог описание WinAPI в Platform SDK.” oistalker отвечает – “Qt & GTK” (ну, утрирую, конечно). Теперь вопрос – где в Qt можно прочитать про функции WinAPI, не говоря уже о функциях API Linux (или как их там, чёрт их возьми)?
Ну признайте, oistalker, вы были неправы. Ваш 1-й пост не по адресу, так?

>Ну признайте, oistalker, вы были неправы.

С чего это я не прав? В самом Linux нет никакого API, – то что подразумевается по WinAPI реализуется с помощью библиотек уровня пользователя, XLib,glibc, GTK/GLib/Qt/etc. Набор же системных вызовов ядра назвать API – это немножко лишка хватить, – оно фактически соответствует DDK и NT Kernel API.

oistalker
>В самом Linux нет никакого API, – то что подразумевается
>по WinAPI реализуется с помощью библиотек уровня пользователя, XLib,glibc,
>GTK/GLib/Qt/etc.
Да-да-да-да. Кажется, начинаю понимать. Т.е., к примеру, там нет даже аналога CreateFile, не говоря уже о CreateWindow, и эти вещи для Linux реализуются на низком уровне в Qt? Надо же, как интересно. А ведь даже у такой маленькой системы, как KolibryOS, есть свой набор API-функций.
Ну, а скажем, поток создать в Linux сложно?

Видимо я не совсем корректно сформулировал вопрос. Реально мне нужны след функции: Работа с потоками, работа с файлами (создать, удалить, прочитать, записать, установить указатель), работа с памятью (если там есть аналоги VirtualAlloc, VirtualFree – получать память выравненную на границу 4кб), ну и работа с сокетами (только UDP и без всяких там WSA). Т.е. самый минимум. Приложение консольное так что никакое GUI не требуется.
ProGrAMmER256
Спасибо, посмотрю.

Файлы, потоки – есть в Qt. Сокеты – входят в состав стандартной библиотеки Си (glibc), также как и функции выделения памяти, файлы, потоки. А использовать системные вызовы для вызова этой фукциональности – моветон. Программа мгновенно становится системозависимой. и скажем, если потребуется запустить её на FreeBSD, получится много – много геморроя.

>Т.е., к примеру, там нет даже аналога CreateFile, не говоря уже о CreateWindow,

Упёртый чёрт. посмотри отладчиком, что дальше по цепочке дергает этот самый CreateFile, – увидишь там ZwCreateFile из DDK.

Я немного фигею с предложения использовать Qt там, где вполне можно ограничиться позиксом.

>С чего это я не прав? В самом Linux нет никакого API, – то что подразумевается по WinAPI реализуется с помощью библиотек уровня пользователя, XLib,glibc, GTK/GLib/Qt/etc. >Набор же системных вызовов ядра назвать API – это немножко лишка хватить, – оно фактически соответствует DDK и NT Kernel API.
Весьма и весьма спорное утверждение. DDK вобще не в тему – мы ведь говорим про то что снаружи ядра находится.
Под системным вызовом можно подразумевать разное.
Например – интерфейс между user space и ядром.
Тот самый механизм, который включает в себя упаковку номера системного вызова и параметров особым образом, переключение в привилегированный режим и вызов функции из таблицы системных вызовов. Номер системного вызова == смещение в таблице.

А можно называть системными вызовами обертки, которые находятся в libc.
Функции open(), read(), write() и далее по списку.
Этот интерфейс стандартизован и поддерживается и на Линуксе, и на Солярисе и на МакОс.
Такого четкого разделения как на винде нет (к вопросу NativeAPI vs WinAPI), поэтому например на Линуксе в том же libc находятся специфические функции типа clone() и futex() для реализации многопоточности.
Поверх платформозависимых функций построены стандартизованные интерфейсы.
Например clone() и futex() обернуты стандартизованной библиотекой pthreads.

Поинт в том, что для того, чтобы добиться переносимости, нужно использовать стиандартизованные интерфейсы.
Это может быть posix, а может быть qt, а может быть apr или даже boost.
продвигать qt как единственное решение – по меньшей мере странно.

работа с потоками – pthread
с файлами – posix
сокеты – собственно сокеты ( )
если нужны окошки (аналоги CreateWindow и прочее) – XWindow

Источник

Аналог winapi CreateProcess под Linux

Виндовый CreateProcess работает следующим образом:

1) Запускается родительский процесс 2) Запускается дочерний процесс 3) Далее завершение процессов:

3-a) если родитель умирает , ребенок продолжает работать

3-b) если ребенок умирает , родитель получает код завершения работы ребенка

Что я смог нарыть под Linux:

fork + exec , то выполняется только пункт 3-b

fork + fork + exec , то выполняется только пункт 3-a

Можно ли сделать так , чтобы выполнялись оба пункта (3-a и 3-b)?

fork + exec , то выполняется только пункт 3-b

3-a должно выполняться, просто дочернему процессу может придти сигнал в обработчик по умолчанию и он завершится.

Спасибо за ответ! Из вашего сообщения я понял, что что-то сделать можно , но вот как.

Допустим я из своего приложения в отдельном потоке запустил стандартный калькулятор с помощью fork+exec . Я хочу чтобы калькулятор жил после завершения работы моей программы. Либо если завершался калькулятор , я хочу получить его код завершения.

Где можно почитать об этом или еще лучше пример кода на СИ ?

P.S. Я совсем недавно на Linux (15 лет на винде), поэтому прошу отнестись с пониманием.

Есть системный вызов sigaction, и соответствующая ему функция sigaction в libc, которая позволяет задавать действие при получении определенных сигналов.

ЕМНИП, в твоем случае дочерний процесс получает SIGHUP, и этот сигнал можно обработать.

Всех благодарю сердечно! И книгу посоветовали и пример дали и советы. Пойду разбираться.

3-a) если родитель умирает , ребенок продолжает работать
3-b) если ребенок умирает , родитель получает код завершения работы ребенка

fork + exec , то выполняется только пункт 3-b

Для меня стандратный калькулятор это bc, а какой у вас? Опишите подробнее, в GUI или в консоле? Есть завязки на терминал, на ввод/вывод. Если ваш калькулятор обменивается по pipe’ам с родителем, то он может получить SIGPIPE. В общем, между fork и exec можно замаскировать сигналы, но если после exec приложение их размаскирует.

В общем, можно написать своё приложение, которое будет прекрасно жить после смерти родителя, а можно найти такое чужое приложение, в котором автор упоролся и вобще засунул постоянную проверку pid’а родителя и без правки кода ничего не получится.

Может вам нужно будет делать fork + fork + exec, но первый дочерний процесс не выходит, а ждёт exec и возвращает его код завершения.

@mky калькулятор я взял для примера, это может быть любое приложение. Важна сама суть конечной функции , чтобы она выполняла такую же функциональность, что и ее виндовая сестра (CreateProcess). Чтобы было понятно для чего: это будет кросс.либа с минимально необходимым функционалом. Ну и конечно в первую очередь – это хороший опыт для меня. Программы упоротых разработчиков меня мало интересуют. В любом случае тут советы уже дали, надеюсь смогу осилить

Источник

C++ Linux и WinAPI

WinAPI в Linux)
понимаю глупый вопрос но всетаки. нужна помощь для аналогов WinAPI в Linux. Пробовал копать в.

Есть ли аналог winapi функции showWindow в Linux?
Есть ли аналог winapi функции showWindow в Linux? Заранее спасибо.

Можно ли код на WINAPI c++ запустить в среде QT и чтобы это работало под MacOS и Linux?
Можно ли код на WINAPI c++ запустить в среде QT и чтобы это работало под MacOS и Linux?

Среда программирования QT есть возможность писать WinAPI код? И компилировать под Macos и Linux
Среда программирования QT есть возможность писать WinAPI код? И компилировать под Macos и Linux .

Можно. Просто берете и пишите.

FCommander, это совсем другой вопрос. Я думаю что несложно с помощью средств сети Internet узнать что же такое кроссплатформенность, что такое api и в чем их отличие.

Добавлено через 31 секунду

Его даже M$ давно не рекомендует. Предлагая концентрироваться на .Net. А последний и в Linux есть.

Мои рекомендации Qt(C++) или .Net(C#)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подскажите ide c# под linux чтобы компилировался файл для linux
Подскажите ide c# под linux чтобы компилировался файл для linux не как в monodevelop

Ошибка Kernel driver not installed (rc=-1908) linux в VirtualBox (Linux Mint)
При попытке запустить ВМ в VB вылетает ошибка Kernel driver not installed (rc=-1908)Смотрел в.

Разметка в Linux жесткого диска для дуалбут MS-DOS и Linux
У меня, значит, на стационарном старичке стоит жесткий на 2 Тб. Win XP такие цифры не знает, а вот.

Linux mint + win 8 + uefi + hibernate – пропал загрузчик linux
Здравствуйте, скажу сразу, линукс установил впервые, поэтому может вопрос будет нубский. На ноуте.

Источник


Adblock
detector