Wenn ein C-Programm in eine ausführbare Datei kompiliert wird, erfolgt dies systemabhängig. Unter Ubuntu wird das ELF Format verwendet und unter Windows haben wir .
Wenn Sie einen Prozess starten, wird der ELF oder PE gelesen und gibt Anweisungen/Zuordnung zur Zuweisung von Speicher und zur Ablage verschiedener Prozessabschnitte in einer virtuellen Speichertabelle. Außerdem verbindet es sich mit dynamisch geladenen Bibliotheken, die bereits im physischen Speicher vorhanden sind und die es mit anderen Prozessen teilen, die dieselben Bibliotheken verwenden. Wenn die dynamischen Bibliotheken nicht vorhanden sind, laden Sie sie. (Linux .so, Windows .dll). Wenn es statische Bibliotheken hat, werden diese zugewiesen und verlinkt (Linux .a, Windows .lib). - Sehr vereinfacht.
Speichereinschränkungen usw. werden vom vorherigen Prozess übernommen.
Umgebungsvariablen werden in die laufende Umgebung für den Prozess eingefügt. Dies sind Pfade, Argumente usw. Dann wird main()
zum Stack hinzugefügt und aufgerufen.
Jetzt wird alles, was vor main passiert, aufgerufen und wie die Verbindung usw. gelöst ist, und so viele andere Dinge, hängt vom System ab. Aus diesem Grund kann man unter Linux keine ausführbare Datei ausführen.
Mit cygwin
erstellt man einfach eine virtuelle Umgebung, in der diese Verknüpfungen usw. gleich sind und funktionieren würden. Man erstellt eine ELF-Umgebung.
Um es für native Windows-Befehlszeile verknüpft zu bekommen, müsste man für Windows kompilieren. In dieser Hinsicht sehe ich, dass es bereits viele Antworten gibt.
Die ELF und PE, wie auf verschiedenen Systemen, haben auch verschiedene Möglichkeiten der Handhabung von Umgebungsvariablen etc. Was diese sind etc. So datei Dateierweiterung wird anders behandelt. Beide laufenden Prozesse haben jedoch die Standard-Streams wie stderr
, stdout
und stdin
. Aber unter Ihr Code in C sie sind nicht das Gleiche.
Es ist wie das Fahren eines Diesels gegen ein Benzinauto. Vieles ist das Gleiche, aber unter der Haube ist einiges anders.
Beachten Sie, dass Signale unter Windows anders behandelt werden.
Es gibt keine "simulierte Befehlszeile". Windows verfügt wie Linux über eine native Befehlszeilenschnittstelle. –
@KerrekSB: Cygwin bietet eine Unix-ähnliche Umgebung unter Windows. Die Cygwin-Befehlszeile ist * nicht * die Windows-Befehlszeile. – celtschk
@celtschk: Cygwin ist in erster Linie eine Posix-API für Win32. Obwohl es zusätzliche Terminal-Unterstützung gibt, ist das für die Situation des OP nicht zentral. –