Basis-APIs
Die Azure Sphere Application Runtime enthält eine Reihe allgemeiner Bibliotheken, die die Basis-APIs definieren, die für die allgemeine Anwendungsentwicklung 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 referenzdokumentation für die Basis-APIs finden. Informationen zu gerätespezifischen APIs finden Sie unter Applibs-APIs.
Nicht unterstützte Funktionen
Es ist wichtig, nur BASIS-API-Funktionen zu verwenden, die explizit in der API-Oberfläche der Azure Sphere-Anwendungslaufzeit enthalten sind. Anwendungen, die nicht unterstützte Funktionen aufrufen, sind möglicherweise nicht mit zukünftigen Versionen des Azure Sphere-Betriebssystems 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-Communityforum verwenden, um die Anforderung zu stellen.
Überprüfen von Funktionen
Um zu bestimmen, ob ein Funktionsaufruf unterstützt wird, verwenden Sie autovervollständigen mit IntelliSense in Visual Studio, oder überprüfen Sie, ob es in den Azure Sphere SDK-Headerdateien enthalten ist. Die Speicherorte der Headerdateien für jede Bibliothek sind in den folgenden Abschnitten aufgeführt. Wenn wir Funktionen in diesen Bibliotheken hinzufügen oder ändern, werden sie in diesem Thema aufgelistet.
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.
In Übereinstimmung mit der Azure Sphere-Sicherheitsrichtlinie und -Architektur werden nicht alle POSIX-Funktionen verfügbar gemacht. Azure Sphere unterstützt beispielsweise 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 einem zukünftigen Release ändern.
API-Referenz:POSIX-Spezifikation
Headerdateispeicherort: Ordner sysroots\API set\usr\include (Windows-Betriebssystem) oder Sysroots/API set/usr/include (Linux-Betriebssystem) in Ihrem Azure Sphere SDK-Installationsverzeichnis.
Tipp
Der Ordner Sysroots\API set\usr\include\sys enthält Header für systemabhängige APIs auf niedriger Ebene, während der übergeordnete Ordner Sysroots\API set\usr\include Header für allgemeine APIs enthält. Dies gilt auch für Linux. Es wird empfohlen, die allgemeinen APIs zu verwenden.
Sie können das neueste SDK hier herunterladen.
Features der C-Standardbibliothek
Wesentliche Teile der folgenden C-Standardbibliotheksfeatures sind ausgeschlossen:
- Dateisystempfade
- Terminalunterstützung
- Authentifizierung und Autorisierung
- Syscall-Funktionen
- System V (SysV)
fcntl
Die verfügbaren und zur Verwendung verfügbaren FUNKTIONS-CMDs fcntl(int fd, int cmd, .../* arg */) sind die folgenden:
- F_GETFL: Ruft den Dateizugriffsmodus und die zugehörige Datei status Flags ab.
- F_SETFL: Legt datei-status-Flags fest, wie vom Argument festgelegt, für einen Dateideskriptor.
- O_NONBLOCK : Argument, das speziell für F_SETFL verfügbar gemacht wird.
Informationen zur Standardverwendung der fcntl()- Funktion finden Sie in der MUSL-Bibliothek.
C-Typ time_t
Zur Vorbereitung des UNIX-Epochenrollovers im Jahr 2038 enthielt musl libc Version 1.2 ein Update von 32 Bit auf 64 Bits vom Typ time_t
C und alle zugehörigen Ableitungen. Weitere Informationen zu diesem Update finden Sie in den Versionshinweisen zu musl time64.
Anwendungen, die mit dem 20.10-Ziel-API-Satz (sysroot 7) kompiliert werden, und höher verwenden die 64-Bit-Version von time_t
. Anwendungen, die mit früheren Versionen des Azure Sphere SDK oder des API-Zielsatzes 20.04 (sysroot 5) erstellt wurden, können weiterhin eine 32-Bit-Definition von time_t verwenden. Neue Versionen des Azure Sphere-Betriebssystems bieten weiterhin dieselbe Application Binary Interface (ABI) für diese Anwendungen.
Anwendungscode, der keine Annahmen über die Größe eines time_t
Werts trifft, ist davon nicht betroffen. Anwendungscode, der explizit oder implizit davon ausgeht, dass time_t
Werte 32-Bit sind (z. B. durch Umwandlung eines time_t
Werts in eine uint32_t), muss jedoch neu geschrieben werden, um die 64-Bit-Version widerzuspiegeln.
Der folgende Codeausschnitt geht davon aus, dass time_t
ein 32-Bit-Wert ist 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 hat, wodurch alle Annahmen über die Größe von time_t
entfernt werden:
// 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 veranschaulicht dies:
// 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 Multi-Protokoll-Übertragungsbibliothek. 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
Headerdateispeicherort: Ordner "Sysroots\API set\usr\include\curl" (Windows-Betriebssystem) oder Ordner "Sysroots/API set/usr/include/curl" (Linux-Betriebssystem) des Azure Sphere SDK-Installationsverzeichnisses.