2017-07-14 2 views
0

Während ich meinen Code schrieb, dachte ich über eine gemeinsame Implementierung für alle POSIX-Betriebssysteme im Gegensatz zu separaten Implementierungen für jedes Betriebssystem nach. Eine der POSIX-API, die ich verwende, ist posix_fallocate() und während des Tests habe ich festgestellt, dass sie nicht von MacOS unterstützt wird.Einfache Möglichkeit, herauszufinden, ob eine Posix-API von einem Betriebssystem implementiert wird

Hätte ich dies früher gewusst, hätte ich diese API nicht verwendet oder separate Implementierungen für jedes Betriebssystem gehabt.

Also meine Frage ist - was ist eine einfache Möglichkeit, Unterstützung für einen bestimmten Posix-Aufruf in verschiedenen Betriebssystemen zu finden? Müssen Benutzer immer nach Dokumentation für jedes Ziel-Betriebssystem suchen?

Danke.

Antwort

1

Der Blick auf die Dokumentation ist ein guter Anfang, aber es wird oft nicht sagen, wann eine bestimmte Funktion implementiert wurde, was auch wichtig ist. Bei obskuren Plattformen kann es schwierig sein zu erkennen, welche älteren Versionen noch relevant sind, wodurch es noch schwieriger wird zu entscheiden, ob eine Abhängigkeit von einer bestimmten POSIX-Funktion akzeptabel ist.

Die andere Frage ist, ob ein Feature implementiert ist, aber mit minderwertiger Qualität. posix_fallocate ist in dieser Hinsicht ein interessanter Eckfall. Die glibc-Implementierung verwendet Emulation aus, wenn die Dateisystem-Unterstützung fehlt für einen tatsächlichen Low-Level-fallocate Betrieb (wie NFS bis vor kurzem):

Je nachdem, was Ihre Anwendung tut, dieses Verhalten könnte nicht akzeptabel sein. Das Überprüfen der Headerdateien und der Dokumentation zeigt dies möglicherweise nicht an (der Hinweis Teil in der oben genannten Dokumentation wurde beispielsweise erst kürzlich hinzugefügt).

Am Ende gibt es keinen guten Ersatz dafür, so früh wie möglich auf allen relevanten Zielen zu bauen und zu testen, aber ich verstehe, dass dies für Nicht-Linux-Ziele immer schwieriger wird.

Verwandte Themen