Mit C das OS rausfinden
-
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.
-
Hey Janjan, lern zu lesen!
Ich kompiliere in Dos, bekomme ein *.shx Datei raus, übertrage die Datei (wie beschreibe ich jetzt mal nicht) auf das Gerät, aktiviere es (wie beschreibe ich jetzt mal nicht) und das Ding läuft. Also, ich muss vorher erst mal nichts wissen, da das programmieren bereits läuft und funktioniert. Ich will jetzt aber mit Bibliotheken arbeiten, die nicht vom Hersteller sind. Ich gehe z.B. auf diese Seite und frag mich jetzt welches System ich probieren muss.
Warum müssen in Forum immer Leute antworten die einen für blöd halten oder sich darüber aufregen, daß der jenige seine Frage nicht selbst beantworten kann.
Mein Frage ist simpel: Ich habe ein Gerät, einen Compiler (wo er läuft ist doch egal aber bitte: DOS) und eine kompilierte Datei die nur auf diesem Gerät läuft. Wie finde ich das Betriebssystem raus?@asc: doch, so einen Compiler habe ich ja. Ich kann ja nur auf einem PC kompilieren. Sehe es wie z.B. ein Symbian Handy, da kompilierst du ja auch auf einem Windows Rechner... Nur weiß ich bei dem Handy ja schon vorab vom Hersteller welches OS
-
p1royal2 schrieb:
Wie finde ich das Betriebssystem raus?
Einfachste Möglichkeit: Du fragst beim Hersteller nach. Bei dem Link den du gepostet hast, stand übrigens irgendwas von Cipherlab OS.
asc schrieb:
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).
Quatsch. Cross-Compiler sind bei solchen Geräten die Regel. Das OS muss auch nicht kompatibel sein.
-
Sag mir bitte nicht, das wir von einem komplett eigenentwickelten Betriebssystem reden. Ist das üblich? Ich würde aber immer noch gern auf Nummer sicher gehen...
Übrigens ist die Firma in Taiwan und der Vertrieb in Deutschland ist milde gesagt unfähig und unkooperativ...
-
Natürlich ist das üblich. Warum sollte embedded-Hardware wie Router ein fertiges Betriebssystem bekommen, was für andere Dinge ausgelegt ist?
Und noch ein letztes mal, vielleicht verstehst du es ja diesmal: Es gibt keine Möglichkeit mit C code das OS herauszufinden. Du musst vorher wissen um welches System es sich handelt.
-
Bring mir ja nichts!?
Naja, mit einem Router hätte ich es ja auch nicht verglichen. Hat Wlan, Bluetooth, USB und Serielle schnittstelle, einen Laserscanner, Speicherkarte und Rom und Ram. Es erinnert an ein komplexes Handy. Das ein Handyhersteller was eigenes entwickelt leuchtet bei den Mengen ein, ich hab halt nur auf eine abgeänderte Unix Version gehofft...
Ich will noch nicht ganz aufgeben, fällt keinem was ein. Und bitte kein "es geht nicht" so allwissend ist keiner...
-
p1royal2 schrieb:
Oder andersrum, gibt es Befehle die nur auf einem OS laufen? Und dann nach dem Ausschlußverfahren ausprobieren?
SCHWACHSINN! Du hast einfach 0 Ahnung vom Programmieren. Lern die Grunddinge, dann wirst du erkennen was für einen scheiß du redest.
-
Natürlich ist das üblich. Warum sollte embedded-Hardware wie Router ein fertiges Betriebssystem bekommen, was für andere Dinge ausgelegt ist?
Na warum wohl? Weil man sich den Entwicklungsaufwand spart! Gerade bei Routern sind freie Systeme wie Linux oder *BSD geeignet.
-
Prinzipiell sehe ich da gerade Schwarz. Wie schon sehr oft angesprochen gibts keine Möglichkeiten (Sicher) zur Laufzeit heraus zu finden auf welchen BS du dich befindest. Das seltsame Datenformat (*.shx Dateien) was du verwendest zeigt wohl das es wohl mit einen eigenen BS zu tun hast. Dein Compiler läuft nur bei dir auf den Rechner. Aber das Compilat ist wohl nichtmal ohne weiteres unter dos/linux/windows ausführbar (Der begriff Cipherlab OS fiel hier schon). Damit kannst du wohl auch die verwendung von ODBC vergessern sofern es nicht zufällig eine Implementierung dafür gibt. Wenn aber das Cipherlab OS gar keinen ODBC Support an sich anbietet, wirds das nicht geben. Ggf hat deren API eigene DB Schnittstellen. Gerade für solche eigenen BS ist man ohnehin sehr eingeschänkt was Fremdlibs angeht.
-
Compiler ist auf Dos Ebene
Was meinst du damit? Kommandozeile ist nicht gleich Dos-Ebene.
*.shx Datei raus, übertrage die Datei auf das Gerät
Na endlich wirst du etwas konkreter. Tja, was fuer ein Geraet?
Na warum wohl? Weil man sich den Entwicklungsaufwand spart! Gerade bei Routern sind freie Systeme wie Linux oder *BSD geeignet.
Das entscheiden ganz andere. Die Telekom setzt auf Linux, die Fritz-Box hat ein eigenes.
-
knivil schrieb:
Das entscheiden ganz andere. Die Telekom setzt auf Linux, die Fritz-Box hat ein eigenes.
Falsch. Sowohl der rosa Riese als auch Fritz setzen auf einen Linux Kernel und andere auf Linux übliche Programme. Es werden nur spezielle Treiber und Patches in den Kernel eingebunden und ein eigenes Webinterface gebaut. Dann wird das System so zu gemacht, dass der normale Anwender nichts mehr von den Linux mitbekommt.
Die einzigen Router die ich kenne, die nicht auf Linux basieren sind einerseits einige Netgear geräte die auf etwas komischen basieren, wo ich immer den Namen vergessen und die Apple geräte die auf BSD aufbauen, weil BSD wohl näher an ihren Mac OS X dran ist.
-
Also, das traurige ist, das es in jedem Forum einen wie Janjan geben muss, der sich nur mit Leuten unterhält die auf seinem Niveau sind und den Rest immer nur als Anfänger beschimpfen kann. Ich habe aus Foren schon so einiges gelernt, von mittlerweile 5 Programmiersprachen von denen ich mittlerweile 2 beruflich ausübe, bis zu einem ohne Fachwissen oder Büchern selbst getätigten Zylinderwechsel bei einem Auto.
Also danke an alle konstruktiven Ratschläge oder Leute die behaupten es nicht zu wissen. Dank solcher Leute lerne ich wenigstens dazu.
Ich habe parallel dazu im Internet gesucht und bin darauf gestossen:
#ifdef WINDOWS puts ("WINDOWS"); #elif defined(WIN32) puts ("WIN32"); #elif defined(linux) puts ("linux"); #else puts ("nein"); #endif
Plus diese Liste im Internet. Es spuckt zumindest ein nein raus, aber das wäre ja auch ok bei einem eigens entwickelten OS. Hätte einer von euch Zeit einen Gegentest zu machen oder liege ich wieder falsch.
Und gleich im vorab. Alle die Beleidigen wollen, sollen mich und meine Beiträge einfach bitte ignorien.
-
p1royal2 schrieb:
Also, das traurige ist, das es in jedem Forum einen wie Janjan geben muss, der sich nur mit Leuten unterhält die auf seinem Niveau sind und den Rest immer nur als Anfänger beschimpfen kann.
Naja, weisst du, es kommt auch ein wenig darauf an, wie man sich selber präsentiert. Ganz am Anfang hat Janjan gesagt:
Janjan schrieb:
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.
(Hervorhebung eingesetzt)
Kurz darauf hast du geantwortet:
p1royal2 schrieb:
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?
(Hervorhebung eingesetzt)
Und was präsentierst du uns nun 3 Seiten später? Eine Lösung mit Makros. Dir ist hoffentlich auch klar, dass deine Lösung das OS nicht zur Laufzeit rausfindet, sondern probiert es während der Kompilierung durch bedingte Kompilation herauszufinden?
Aber wie schon andere gesagt haben, es gibt keine Möglichkeiten mit C ohne Wissen über das zugrunde liegende System herauszufinden, auf welchen OS das Programm läuft.
Die Informationen zum OS sollten dem Gerät beigelegt sein, bzw. in den Entwicklungswerkzeugen vorhanden sein. Irgendwo steht dies ganz sicher. Irgendwo sind ja wohl auch die Schnittstellen des OS spezifiziert. Du musst doch irgendwelche Dokumentation dazu haben, sonst kannst du die Entwicklung darauf gleich vergessen. Und wenn sie nicht vorhanden sind, dann gibt es keinen schnelleren Weg, als sie vom Hersteller anzufordern.
Grüssli