Partager via


API de base

Important

Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).

Le runtime d’application Azure Sphere inclut un ensemble de bibliothèques communes qui définissent les API de base disponibles à des fins de développement d’applications générales : une bibliothèque standard C basée sur POSIX, une bibliothèque de client HTTP curl et une bibliothèque de SDK C Azure IoT.

Cette rubrique explique comment déterminer les API de base incluses dans Azure Sphere et où trouver leur documentation de référence. Pour plus d’informations sur les API propres aux appareils, consultez API des bibliothèques d’applications.

Fonctions non prises en charge

Il est important d’utiliser les seules fonctions d'API base explicitement incluses dans la surface d’API du runtime d'application Azure Sphere. Les applications appelant des fonctions non prises en charge peuvent ne pas être compatibles avec les versions ultérieures du système d’exploitation Azure Sphere et entraîner une instabilité des appareils. Si vous souhaitez demander la prise en charge d’autres fonctions, vous pouvez utiliser le forum communauté Azure Sphere pour effectuer la demande.

Vérifier les fonctions

Pour savoir si un appel de fonction est pris en charge, utilisez la saisie semi-automatique avec IntelliSense dans Visual Studio, ou vérifiez qu’il est inclus dans les fichiers d’en-tête du kit de développement logiciel (SDK) Azure Sphere. Les emplacements des fichiers d’en-tête de chaque bibliothèque sont répertoriés dans les sections ci-dessous. Les fonctions ajoutées ou modifiées dans ces bibliothèques sont répertoriées dans cette rubrique.

bibliothèque musl C standard

Azure Sphere est fourni avec la bibliothèque standard musl C (musl libc). Comme glibc, musl libc est une bibliothèque C standard POSIX. Les différences fonctionnelles entre musl libc et glibc sont répertoriées dans le wiki musl libc.

Cohérente avec la stratégie et l’architecture de sécurité Azure Sphere, toutes les fonctions POSIX ne sont pas exposées. Par exemple, Azure Sphere ne prend pas en charge les fonctions open() ou fopen(). La surface d’API de la bibliothèque prise en charge est définie dans les fichiers d’en-tête du kit de développement logiciel (SDK) Azure Sphere. L’implémentation actuelle est susceptible de changer dans une version ultérieure.

Référence d’API : spécification POSIX

Emplacement du fichier d’en-tête : dossiers Sysroots\API set\usr\include (système d’exploitation Windows) ou Sysroots/API set/usr/include (système d’exploitation Linux) de votre répertoire d’installation du Kit de développement logiciel (SDK) Azure Sphere.

Conseil

Le dossier Sysroots\API set\usr\include\sys contient des en-têtes pour les API dépendantes du système de bas niveau, tandis que le dossier parent Sysroots\API set\usr\include contient des en-têtes pour les API générales. Cela est également vrai pour Linux. Nous vous recommandons d’utiliser les API générales.

Vous pouvez télécharger le kit SDK le plus récent ici.

Fonctionnalités de la bibliothèque standard C

Des parties importantes des fonctionnalités suivantes de la bibliothèque standard C sont exclues :

  • Chemins d’accès du système de fichiers
  • Prise en charge des terminaux
  • Authentification et autorisation
  • Fonctions Syscall
  • Système V (SysV)

fcntl

Les CMD de la fonction fcntl(int fd, int cmd, .../* arg */) exposées et disponibles pour une utilisation sont les suivantes :

  • F_GETFL : récupère le mode d’accès aux fichiers et les indicateurs d’état de fichier associés.
  • F_SETFL : définit des indicateurs d’état de fichier, tels que définis par l’argument, pour un descripteur de fichier.
  • O_NONBLOCK - Argument exposé spécifiquement pour F_SETFL.

Pour une utilisation standard de la fonction fcntl(), consultez la bibliothèque MUSL.

Type C time_t

En préparation de la substitution d’époque UNIX en 2038, musl libc version 1.2 incluait une mise à jour, de 32 bits à 64 bits, de type time_t C et de tous ses dérivés. Pour plus d’informations sur cette mise à jour, consultez les notes de publication time64 musl.

Les applications compilées sur l’ensemble d’API cible 20.10 (sysroot 7) et ultérieurement utilisent la version 64 bits de time_t. Les applications créées à l’aide de versions antérieures du Kit de développement logiciel (SDK) Azure Sphere ou de l’API cible 20.04 (sysroot 5) ou antérieures peuvent continuer à utiliser une définition 32 bits de time_t. Les nouvelles versions du système d’exploitation Azure Sphere continueront à fournir la même interface binaire d’application (ABI) à ces applications.

Le code d’application qui ne fait aucune hypothèse sur la taille d’une time_t valeur n’est pas affecté. Toutefois, le code d’application qui suppose explicitement ou implicitement que time_t les valeurs sont 32 bits (par exemple, en cas de conversion d’une time_t valeur en uint32_t) doit être réécrite pour refléter la version 64 bits.

L’extrait de code suivant suppose qu’il time_t s’agit d’une valeur 32 bits et provoquera un dépassement de mémoire tampon s’il est recompilé avec le Kit de développement logiciel (SDK) 20.10 (sysroot 7) ou version ultérieure :

// 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

Le code corrigé suivant définit la taille de la mémoire tampon de la même taille que la time_t valeur, supprimant ainsi toutes les hypothèses relatives à la taille de 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));

Si vous devez continuer à utiliser une valeur de temps 32 bits, utilisez le time32_t type dans la nouvelle version de musl. L’extrait de code suivant montre comment :

// 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));

bibliothèque curl

Le kit de développement logiciel (SDK) Azure Sphere inclut un sous-ensemble de la bibliothèque de transfert multiprotocole libcurl. Vous pouvez utiliser cette API pour transférer des données via HTTP/HTTPS. Les autres protocoles de transfert ne sont pas pris en charge. La surface d’API de la bibliothèque prise en charge est définie dans les fichiers d’en-tête du kit de développement logiciel (SDK) Azure Sphere.

Informations de référence sur l’API : site web libcurl

Emplacement du fichier d’en-tête : dossier Sysroots\API set\usr\include\curl (système d’exploitation Windows) ou Sysroots/API set/usr/include/curl (système d’exploitation Linux) du répertoire d’installation du KIT de développement logiciel (SDK) Azure Sphere.

Voir aussi