Share via


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_tentfernt 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.

Siehe auch