GNU/Linux >> Znalost Linux >  >> Linux

Jaký by byl ekvivalent Win32 API v linuxu?

Musíte pochopit, co jsou systémová volání. V Linuxu jsou to nejnižší možná uživatelská rozhraní API (naproti tomu Win32 API pravděpodobně směšuje skutečná systémová volání jádra s některými funkcemi knihoven. libc také dělá takový mix na Linuxu). fork(2), execve(2), open(2), pipe(2), mmap(2), read(2), poll(2), close(2), dup2(2), sigaction(2) jsou důležitá systémová volání (ale je jich asi 300, seznam viz syscalls(2), který závisí na vašem přesném linuxovém jádře).

Neočekávejte, že všechny funkce systému Windows budou dostupné v systému Linux (a naopak).

O takovém ekvivalentu ani neuvažujte.

Získejte jiný způsob myšlení v systému Linux.

(Zejména procesy se velmi liší v Linuxu a ve Windows).

Nezapomeňte, že Linux je svobodný software a můžete se ponořit do zdrojového kódu každé funkce, kterou v Linuxu používáte. Čtěte, hledejte, vylepšujte......

Nejprve si přečtěte manuálovou stránku intro(2) a několik dalších manuálových stránek (zejména syscalls(2), intro(3) atd...). Přečtěte si také např. Pokročilé programování Linuxu a pokročilé programování Unixu.

Některé knihovny se snaží vyčlenit a poskytnout společnou abstrakci pro Posix (např. Linux) i Windows. Zejména Qt (a také Gtk nebo FLTK nebo POCO a Wt pro webové aplikace a sqlite pro databáze).

Některý serverový software s otevřeným zdrojovým kódem (např. lighttpd, exim, postgresql atd...) lze spustit na Linuxu i Windows (samozřejmě po rekompilaci)

Pokud vás zajímá grafické rozhraní, pochopte důležitou roli X11 (všimněte si, že X11 server je nejblíže obrazovce a klávesnici; většina grafických aplikací jsou klienti X11). V roce 2016 nebo 2020 má X11 tendenci být nahrazen Waylandem (ale nevšimnete si toho implementačního "detailu" - opravdu zásadního - pokud kódujete proti Qt nebo GTK)

Pokud napíšete aplikaci používající pouze volání Qt a/nebo POCO (která nejsou zdokumentována jako specifická pro Linux nebo Windows) navíc se standardními funkcemi C++, měla by být zdrojová přenositelná z Linuxu do Windows a naopak.


Pokud chcete přenést aplikaci, která používá volání Win32, nejlepším řešením může být použití WineLib. To využívá knihovny, které jsou základem Wine, ale není to totéž, jako když spouštíte aplikaci pomocí Wine – svou aplikaci znovu zkompilujete jako linuxovou aplikaci pouze pomocí sdílených knihoven WineLib. Bude však stále vypadat jako aplikace pro Windows, pokud nezměníte vrstvu uživatelského rozhraní.

Jak bylo řečeno jinde v odpovědích, neexistuje žádný skutečný přímý ekvivalent k Win32 v Linuxu - různé části Win32 jsou poskytovány různými komponentami a někdy máte na výběr komponent. To je možné, protože některé ekvivalenty částí Win32 jsou implementovány nativně na nižší úrovni – například Win32 poskytuje komponenty uživatelského rozhraní, jejichž ekvivalenty jsou dostupné buď v GTK, Qt nebo v libovolném počtu dalších sad nástrojů (jako WineLib), které samy interagujte s X. Stejně jako byste obvykle používali komponenty z Win32 místo toho, abyste kreslili své vlastní pomocí volání API nižší úrovně, tak byste normálně používali komponenty z vaší sady nástrojů uživatelského rozhraní na vysoké úrovni místo přímého použití X.


Linux
  1. Co je linuxový ekvivalent pozastavení DOSu?

  2. Co je ekvivalentem Posix popen() v Win32 API?

  3. Jaký je ekvivalent linuxového příkazu sudo fdisk -l v MacOS?

  1. Co dělá Linux udržitelným OS

  2. Linux vs. Unix:Jaký je rozdíl?

  3. Jaký je linuxový ekvivalent Windows Startup?

  1. Jaká je aktuální úroveň běhu systému Linux?

  2. Jaký je ekvivalent getch() &getche() v Linuxu?

  3. Jaký je ekvivalent C++ pro AutoResetEvent pod Linuxem?