2010-10-05 4 views
6

Gibt es eine C-Bibliothek für Operationen wie Dateioperationen, Systeminformationen usw., die generisch sind, die verwendet werden können, wenn sie auf verschiedenen Plattformen kompiliert werden und sich ähnlich verhalten?Betriebssystem agnostische C-Bibliothek

Bearbeiten: Etwas wie Java oder .NET-Plattform abstrahieren die Hardware.

Antwort

4

Ja; die ISO Standard C Bibliothek. Es deckt möglicherweise nicht alle Funktionen, die Sie wollen, aber das ist genau, weil es ist generischen, und als solche ist auch niedrigsten gemeinsamen Nenner. Es unterstützt nur Funktionen, von denen vernünftigerweise erwartet werden kann, dass sie auf Hardware einschließlich eingebetteter Systeme vorhanden sind.

Die Vorgehensweise, um dies zu erreichen, besteht darin, den Bereich der zu unterstützenden Zielplattformen und dann die Anwendungsdomänen (z. B. GUI, Netzwerk, Multithreading, Bildverarbeitung, Dateiverwaltung usw.) anzugeben und dann auszuwählen die einzelnen plattformübergreifenden Bibliotheken, die Ihren Anforderungen entsprechen. Es gibt wahrscheinlich keine einzige Bibliothek, die alle Ihre Bedürfnisse erfüllt, und in einigen Fällen keine gemeinsame Bibliothek.

Das heißt, Sie werden immer in dieser Hinsicht besser bedient werden, indem Sie C++, wo Sie jede C-Bibliothek sowie C++ - Bibliotheken verwenden können. Die C++ - Standardbibliothek ist nicht nur größer, sondern Bibliotheken wie Boost, wxWidgets, ACE decken auch ein breiteres Domänenspektrum ab. Ein anderer Ansatz ist die Verwendung einer plattformübergreifenden Sprache wie Java, die das Problem löst, indem die Hardware zu einer virtuellen Maschine abstrahiert wird. Ähnlich können .NET/Mono und C# eine Lösung für geeignet begrenzte Zielplattformen bereitstellen.

Added folgenden Kommentar: Abstraktion Hardware in Echt Maschine Zielsprache (als solche zu einer VM Sprache im Gegensatz Java oder CLR-basierten Sprachen) vom Betriebssystem zur Verfügung gestellt, so was Sie vielleicht brauchen eine gemeinsame Betriebssystem-API. POSIX ist wahrscheinlich das, was Ihnen am nächsten kommt, da es unter Linux, Unix, OSX (das ist Unix), QNX, VxWorks, BeOS und vielen anderen unterstützt wird; aber nicht wichtig Windows. Eine Möglichkeit, POSIX unter Windows zu verwenden, ist die Verwendung von Cygwin. Eine andere Möglichkeit besteht darin, eine VM als Host für ein POSIX-Betriebssystem wie Linux zu verwenden.

+0

Genau! Ich suchte nach einer plattformübergreifenden Bibliothek, die die gleiche Arbeit wie Java und C# durch Abstrahieren der Hardware leistet. Lassen Sie mich auch meine Frage bearbeiten. – bdhar

10

Haben Sie die Standardbibliothek ausprobiert? Es sollte auf jedem System implementiert werden, das über eine ISO-kompatible C-Laufzeit verfügt.

1

Für alles, was nicht in der Standardbibliothek gefunden wird, ist GLib ein guter erster Ort, um mit anderen Bibliotheken zu schauen, die gebaut wurden, um damit zu interagieren. Es bietet zum Beispiel Threads, Mutexes und IPC, die Sie nicht einfach mit Standard-Bibliotheken schreiben können, und Sie können viele weitere GNU-Bibliotheken verwenden, die den gleichen Konventionen folgen, bis hin zu einer vollständigen GUI in GTK +. GLib unterstützt die üblichen gängigen Betriebssysteme.

0

Wenn die C-Standardbibliothek für Ihre Anforderungen nicht ausreicht, könnte eine minimale hyperportierbare Teilmenge von POSIX das Ziel sein, das Sie codieren möchten. Zum Beispiel hat das wichtigste Nicht-POSIX-Betriebssystem Windows nach wie vor eine Reihe von Funktionen mit dem gleichen Namen wie POSIX-Funktionen, die einigermaßen eng verhalten - open, read, write usw.

Dokumentieren, was genau eine „hyperportable Teilmenge von POSIX "beinhaltet, und welche Nicht-POSIX-Betriebssysteme einer solchen Teilmenge entsprechen würden, ist eine mäßig schwierige Aufgabe, die an und für sich selbst nützlich sein könnte, um die Pest von" portable runtime "-Produkten, die erscheinen, zu vermeiden immer wieder alle paar Jahre und unnötig populäre Software wie Firefox und Apache aufblähen.

0

Wenn Sie Einrichtungen benötigen, die über die Standard C-Bibliothek hinausgehen, werfen Sie einen Blick auf die (APR). Sie sollten auch überprüfen, ob POSIX die von Ihnen gewünschte Funktionalität bietet, obwohl diese mit einer eigenen Tüte Würmer geliefert wird.

Wenn Sie in Grafiken und ähnliches einsteigen wollen, dann sind Sie in einer anderen Welt - GTK, Glib und Qt kommen mir in den Sinn, obwohl ich keines davon benutzt habe.

+0

-1 für die Empfehlung APR. Es gehört in '/ dev/null'. Programme, die ich mit APR gesehen habe (svn kommt mir in den Sinn) verbringen Hunderte von Zeilen Code (gepackt mit möglichen Fehlerbedingungen wie mögliche Zuteilung fehlgeschlagen), die das Äquivalent eines einzelnen 'printf' Anrufs. Wenn Sie diese Art von nutzlosem Aufwand benötigen, sollten Sie C++ und STL verwenden. –

+0

@R ..: Sie haben vielleicht Recht mit APR, aber die Verwendung, um eine billige und schlecht informierte Schuss in C++ und STL zu haben ist unnötig. – Clifford

+0

Zumindest erleichtert C++ die Verarbeitung von Ausnahmebehandlungen und Fehler viel einfacher, aber ich glaube nicht, dass Sie argumentieren können, dass die Verwendung von C++ und STL nicht viele unnötige Zuweisungsoperationen einführt, die auf triviale Operationen versagen könnten, die vollständig ausgeführt werden könnten der Stapel ohne Zuteilungen und keine Möglichkeit des Scheiterns. –

Verwandte Themen