Basis-APIs
Wichtig
Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.
Die Azure Sphere-Anwendungsruntime enthält eine Reihe gängiger Bibliotheken, die die Basis-APIs definieren, die für die Entwicklung von allgemeinen Anwendungen verfügbar sind: eine POSIX-basierte C-Standardbibliothek, eine curl-basierte HTTP-Clientbibliothek und eine Azure IoT C SDK-Bibliothek.
In diesem Thema wird beschrieben, wie Sie ermitteln, welche Basis-APIs in Azure Sphere enthalten sind und wo Sie die Referenzdokumentation zu den Basis-APIs finden. Informationen zu gerätespezifischen APIs finden Sie unter Applibs-APIs.
Nicht unterstützte Funktionen
Es ist wichtig, dass nur Funktionen der Basis-API genutzt werden, die explizit in der API-Oberfläche der Azure Sphere-Anwendungsruntime enthalten sind. Anwendungen, von denen nicht unterstützte Funktionen aufgerufen werden, sind mit zukünftigen Releases des Azure Sphere-Betriebssystems ggf. nicht kompatibel und können zu Geräteinstabilität führen. Wenn Sie Unterstützung für zusätzliche Funktionen anfordern möchten, können Sie das Azure Sphere Community-Forum verwenden, um die Anfrage zu stellen.
Überprüfen von Funktionen
Gehen Sie wie folgt vor, um zu ermitteln, ob ein Funktionsaufruf unterstützt wird: Verwenden Sie AutoVervollständigen mit IntelliSense in Visual Studio, oder stellen Sie sicher, dass er in den Azure Sphere SDK-Headerdateien enthalten ist. Die Speicherorte der Headerdateien für die einzelnen Bibliotheken sind in den Abschnitten unten angegeben. Wenn wir in diesen Bibliotheken Funktionen hinzufügen oder ändern, listen wir sie in diesem Thema auf.
Musl C Standardbibliothek
Azure Sphere wird mit der Musl C-Standardbibliothek (musl libc) ausgeliefert. Wie glibc ist musl libc eine POSIX-kompatible Standard-C-Bibliothek. Funktionale Unterschiede zwischen musl libc und glibc sind im Musl libc Wiki aufgeführt.
Im Einklang mit der Azure Sphere-Sicherheitsrichtlinie und -Architektur werden nicht alle POSIX-Funktionen verfügbar gemacht. Beispielsweise unterstützt Azure Sphere die Funktionen open() oder fopen() nicht. Die gesamte unterstützte API-Oberfläche der Bibliothek ist in den Azure Sphere SDK-Headerdateien definiert. Die aktuelle Implementierung kann sich in einer zukünftigen Version ändern.
API-Referenz: POSIX-Spezifikation
Speicherort der Headerdatei: Sysroots\API set\usr\include (Windows OS) oder Sysroots/API set/usr/include (Linux OS) Ordner Ihres Azure Sphere SDK-Installationsverzeichnisses.
Tipp
Der Ordner "Sysroots\API set\usr\include\sys" enthält Header für systemabhängige APIs auf niedriger Ebene, während der Sysroots\API set\usr\include übergeordnete Ordner Header für allgemeine APIs enthält. Dies gilt auch für Linux. Es wird empfohlen, die allgemeinen APIs zu verwenden.
Hier können Sie das neueste SDK herunterladen.
Features der C-Standardbibliothek
Wesentliche Teile der folgenden Features der C-Standardbibliothek sind ausgeschlossen:
- Dateisystempfade
- Terminalunterstützung
- Authentifizierung und Autorisierung
- Syscall-Funktionen
- System V (SysV)
fcntl
Die fcntl(int fd, int cmd, .../* arg */) Funktion CMDs verfügbar und für die Verwendung verfügbar sind, sind die folgenden:
- F_GETFL – Ruft den Dateizugriffsmodus und die zugehörigen Dateistatuskennzeichnungen ab.
- F_SETFL – Legt Dateistatuskennzeichnungen fest, wie sie von der Arge festgelegt werden, für einen Dateideskriptor.
- O_NONBLOCK - Argument, das speziell für F_SETFL verfügbar gemacht wird.
Die Standardverwendung der Funktion fcntl() finden Sie in der MUSL-Bibliothek.
C-Typ time_t
In Vorbereitung auf den UNIX-Epochenrollover im Jahr 2038 enthielt musl libc Version 1.2 ein Update von 32 Bit bis 64 Bits vom Typ C time_t
und alle seiner Ableitungen. Weitere Informationen zu diesem Update finden Sie in den Versionshinweisen zu musl time64.
Anwendungen, die mit dem Ziel-API-Satz 20.10 (sysroot 7) kompiliert wurden, und verwenden die 64-Bit-Version von time_t
. Anwendungen, die mit früheren Versionen des Azure Sphere SDK oder der Ziel-API 20.04 (sysroot 5) oder früheren Versionen erstellt wurden, können weiterhin eine 32-Bit-Definition von time_t verwenden. Neue Versionen des Azure Sphere-Betriebssystems stellen diese Anwendungen weiterhin dieselbe Application Binary Interface (ABI) bereit.
Anwendungscode, der keine Annahmen über die Größe eines time_t
Werts vorgibt, sind nicht betroffen. Anwendungscode, der explizit oder implizit davon ausgeht, dass time_t
Werte 32-Bit (z. B. durch Umwandlung eines time_t
Werts in eine uint32_t) neu geschrieben werden müssen, um die 64-Bit-Version widerzuspiegeln.
Der folgende Codeausschnitt geht davon aus, dass es time_t
sich um einen 32-Bit-Wert handelt und einen Pufferüberlauf verursacht, wenn er mit dem 20.10 SDK (sysroot 7) oder höher neu kompiliert wird:
// Incorrect code that assumes a 32-bit time_t value
time_t t = time(NULL);
char buffer[4];
memcpy(buffer, &t, sizeof(t)); // <-- buffer overrun when time_t is 64 bits
Der folgende korrigierte Code definiert den Puffer so, dass er die gleiche Größe wie der time_t
Wert aufweist, wodurch alle Annahmen über die Größe von time_t
:
// Corrected version of the code. It does not hard-code the size of time_t
time_t t; // time_t represents the 64-bit struct.
char buffer[sizeof(time_t)]; // Buffer size is based on the actual size of time_t
memcpy(buffer, &t, sizeof(t));
Wenn Sie weiterhin einen 32-Bit-Zeitwert verwenden müssen, verwenden Sie den time32_t
Typ in der neuen Version von Musl. Der folgende Codeausschnitt zeigt, wie:
// Corrected version of the code for cases where 32-bit time_t is needed
time32_t t = /* ... initialize 32-bit value ... */;
char buffer[sizeof(time32_t)];
memcpy(buffer, &t, sizeof(t));
cURL-Bibliothek
Das Azure Sphere SDK enthält eine Teilmenge der libcurl-Bibliothek für die Übertragung mit mehreren Protokollen. Sie können diese API verwenden, um Daten über HTTP/HTTPS zu übertragen. Die anderen Übertragungsprotokolle werden nicht unterstützt. Die gesamte unterstützte API-Oberfläche der Bibliothek ist in den Azure Sphere SDK-Headerdateien definiert.
API-Referenz: libcurl-Website
Speicherort der Headerdatei: Sysroots\API set\usr\include\curl (Windows OS)-Ordner oder Sysroots/API set/usr/include/curl (Linux OS)-Ordner des Azure Sphere SDK-Installationsverzeichnisses.