Mit C das OS rausfinden



  • Also, bis jetzt war mir immer klar auf welchem OS mein Programm läuft, hab es ja meistens selbst aufgesetzt.

    Aber jetzt habe ich sowas in der Hand und brauche die richtigen Bibliothek. Leider spucken die Herstellerangaben nichts raus. Gibt es einen Trick mit Standard C Befehlen das richtige Betriebssystem zu erfahren?



  • Du kannst per WinAPI prüfen welche Windows Version jetzt läuft. Ansonsten wird's schwierig.

    Du kannst dein Programm beim Systemstart laden lassen und in MBR u. Co nachsehen, welche OSs verfügbar sind. Die Info kopierst du dir dann eine Speicherstelle und betest.



  • p1royal2 schrieb:

    Gibt es einen Trick mit Standard C Befehlen das richtige Betriebssystem zu erfahren?

    Nein. Definitiv nicht. Das sinnvollste ist immernoch mit Makros bedingte Kompilation zu haben, wobei das Makro halt vom Benutzer beim kompilieren definiert werden muss (Ausnahme sie vordefinierte Makros).

    Visual Studio definiert z.B. automatisch WIN32.



  • Das bringt ihm ja nichts. Er will es zur Laufzeit feststellen. Der "dumme Anweder" mag es meistens nicht sein Programm zu kompi...was?



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Also mir geht es um eine ODBC Bibliothek. Und mit Makros fang ich lieber mal nicht an. Und es ist kein Windows, aber was es ist, kann ich überhaupt nicht einschätzen! Gibt es keine Systemvariablen?



  • FrEEzE2046 schrieb:

    Das bringt ihm ja nichts. Er will es zur Laufzeit feststellen. Der "dumme Anweder" mag es meistens nicht sein Programm zu kompi...was?

    Deswegen muss er vorkompilierte Versionen rausbringen, und da kann er es selbst definieren. Ein Programm, kompiliert für Linux, läuft nicht unter Windows. 😉



  • p1royal2 schrieb:

    Gibt es keine Systemvariablen?

    Das auslesen von Systemvariablen ist vom System abhängig, also musst du je nach System anders vorgehen. Und um zu wissen wie du vorgehst, musst du wissen um welches System es sich handelt.



  • Oder andersrum, gibt es Befehle die nur auf einem OS laufen? Und dann nach dem Ausschlußverfahren ausprobieren?



  • p1royal2 schrieb:

    Oder andersrum, gibt es Befehle die nur auf einem OS laufen? Und dann nach dem Ausschlußverfahren ausprobieren?

    Wie willst du eigentlich ein C-Programm kompilieren, wenn du nicht weißt für welches System?



  • p1royal2 schrieb:

    Oder andersrum, gibt es Befehle die nur auf einem OS laufen? Und dann nach dem Ausschlußverfahren ausprobieren?

    Was du willst ist einfach totaler Quark.

    Ein Programm für das System X kompiliert ist, wird nicht auf anderen Systemen laufen. So einfach ist das. Daher musst du selbst bereits wissen, für welches System du kompilierst, und kannst daher auch gleich ein Makro definieren.



  • ist C nicht portabel 😕 😮



  • zum Beispiel schrieb:

    ist C nicht portabel 😕 😮

    Der Quellcode schon, Kompilate aber nicht.



  • eins der probleme die dabei auftreten ist, dass du ein fertiges programm starten mußt. dazu verwendet windows pe-dateien, linux elf dateien und für mac weiß ichs nicht, die werden aber auch sicher ihr eigenes süppchen kochen. also auch wenn es die selben cpu's sind sollte dein programm nicht starten, da eben der einsprungspunkt nicht stimmt.



  • p1royal2 schrieb:

    Und mit Makros fang ich lieber mal nicht an.

    Hmm, na dann viel Spass. Anders geht das nämlich nicht.
    🙂



  • Also, das Ding kam an, ich programmiere unter Windows und der Compiler ist auf Dos Ebene und schreibt mir zwar irgendwas von Toshiba, aber eben auch nicht für welches OS. Die Standard Bibliotheken waren ebenfalls mit dabei uns so programmiere ich ja schon fleißig vor mich hin. Nur muss ich jetzt eine fremde Bibliothek einbauen (halt #include <odbc.h> und dafür muss ich die richtige im Internet finden...



  • p1royal2 schrieb:

    Also, das Ding kam an, ich programmiere unter Windows und der Compiler ist auf Dos Ebene und schreibt mir zwar irgendwas von Toshiba, aber eben auch nicht für welches OS. Die Standard Bibliotheken waren ebenfalls mit dabei uns so programmiere ich ja schon fleißig vor mich hin. Nur muss ich jetzt eine fremde Bibliothek einbauen (halt #include <odbc.h> und dafür muss ich die richtige im Internet finden...

    Da hast du doch dein OS, es ist DOS. Ob das von irgendeiner Bibliothek (wie odbc) unterstützt wird, ist eine andere Frage. Vermutlich nicht.



  • Check ich nicht, wo ich es Compile ist doch doch nicht das System für das ich es Compile?

    Ich kann doch auf Windows ein Programm kompilieren das nur auf Linux läuft!?



  • Learn the fucking basics.

    Du kompilierst für ein bestimmtes System. Du musst natürlich vorher wissen wofür du kompilierst. Du kannst das kompilierte Programm nur auf diesem System benutzen.



  • p1royal2 schrieb:

    Check ich nicht, wo ich es Compile ist doch doch nicht das System für das ich es Compile?

    Doch, eben das (oder ein damit kompatibles. Einzige Ausnahme wäre, wenn der Compiler in der Lage ist für andere Plattformen zu kompilieren (was aber die Ausnahme, nicht die Regel ist).

    p1royal2 schrieb:

    Ich kann doch auf Windows ein Programm kompilieren das nur auf Linux läuft!?

    Nein, oder nur mit speziellen Compilern.

    Verwechsle nicht schreiben mit kompilieren. Schreiben kannst du in der Tat Code für unterschiedlichste Systeme, kompilieren kannst du (in der Regel) nur für die Plattform, auf dem du das Kompilat erstellst.


Anmelden zum Antworten