API di base
Importante
Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).
Azure Sphere Application Runtime include un set di librerie comuni che definiscono le API di base disponibili per lo sviluppo di applicazioni di alto livello: una libreria standard C basata su POSIX, una libreria client HTTP basata su curl e una libreria di Azure IoT C SDK.
Questo argomento descrive come determinare quali API di base sono incluse in Azure Sphere e dove trovare la documentazione di riferimento per tali API. Per informazioni sulle API specifiche dei dispositivi, vedere API Applibs.
Funzioni non supportate
È importante usare solo le funzioni delle API di base che sono incluse in modo esplicito nella superficie dell'API di Azure Sphere Application Runtime. Le applicazioni che chiamano funzioni non supportate potrebbero non essere compatibili con le versioni future del sistema operativo Azure Sphere e possono causare instabilità dei dispositivi. Se si vuole richiedere supporto per funzioni aggiuntive, è possibile usare il forum della community di Azure Sphere per inviare la richiesta.
Verificare le funzioni
Per determinare se una chiamata di funzione è supportata, usare il completamento automatico con IntelliSense in Visual Studio o verificare che sia inclusa nei file di intestazione di Azure Sphere SDK. Nelle sezioni seguenti sono elencati i percorsi dei file di intestazione per ogni libreria. Eventuali funzioni aggiunte o modificate in queste librerie verranno elencate in questo argomento.
Libreria standard musl C
Azure Sphere viene fornito con la libreria standard musl C (musl libc). Come glibc, musl libc è una libreria C standard conforme a POSIX. Le differenze funzionali tra musl libc e glibc sono elencate nel wiki musl libc.
Coerente con i criteri di sicurezza e l'architettura di Azure Sphere, non vengono esposte tutte le funzioni POSIX. Ad esempio, Azure Sphere non supporta le funzioni open() o fopen(). L'intera superficie dell'API supportata della libreria è definita nei file di intestazione di Azure Sphere SDK. L'implementazione corrente può cambiare in una versione futura.
Informazioni di riferimento sulle API: specifica POSIX
Percorso del file di intestazione: cartelle Sysroots\API set\usr\include (sistema operativo Windows) o Sysroots/API set/usr/include (sistema operativo Linux) della directory di installazione di Azure Sphere SDK.
Suggerimento
La cartella Sysroots\API set\usr\include\sys contiene intestazioni per le API dipendenti dal sistema di basso livello, mentre la cartella padre Sysroots\API set\usr\include contiene intestazioni per le API generali. Questo vale anche per Linux. È consigliabile usare le API generali.
È possibile scaricare l'SDK più recente qui.
Funzionalità della libreria standard C
Sono escluse parti significative delle funzionalità seguenti della libreria standard C:
- Percorsi del file system
- Supporto del terminale
- Autenticazione e autorizzazione
- Funzioni syscall
- System V (SysV)
fcntl
I CMD fcntl(int fd, int cmd, .../* arg */) esposti e disponibili per l'uso sono i seguenti:
- F_GETFL: recupera la modalità di accesso ai file e i flag di stato del file correlati.
- F_SETFL: imposta i flag di stato dei file, come impostato dall'oggetto arg, per un descrittore di file.
- O_NONBLOCK: argomento esposto in modo specifico per F_SETFL.
Per l'utilizzo standard della funzione fcntl(), vedere la libreria MUSL.
Time_t di tipo C
In preparazione al rollover dei periodi UNIX nel 2038, musl libc versione 1.2 includeva un aggiornamento, da 32 bit a 64 bit, di tipo time_t
C e di tutti i derivati. Per altre informazioni su questo aggiornamento, vedere note sulla versione musl time64.
Le applicazioni compilate in base al set di API di destinazione 20.10 (sysroot 7) e versioni successive usano la versione a 64 bit di time_t
. Le applicazioni create usando le versioni precedenti di Azure Sphere SDK o il set di API di destinazione 20.04 (sysroot 5) o versioni precedenti possono continuare a usare una definizione a 32 bit di time_t. Le nuove versioni del sistema operativo Azure Sphere continueranno a fornire la stessa interfaccia ABI (Application Binary Interface) a queste applicazioni.
Il codice dell'applicazione che non presuppone le dimensioni di un time_t
valore non è interessato. Tuttavia, il codice dell'applicazione che presuppone in modo esplicito o implicito che time_t
i valori siano a 32 bit (ad esempio, eseguendo il cast di un time_t
valore in un uint32_t) devono essere riscritti per riflettere la versione a 64 bit.
Il frammento di codice seguente presuppone che time_t
sia un valore a 32 bit e provocherà un sovraccarico del buffer se ricompilato con l'SDK 20.10 (sysroot 7) o versione successiva:
// 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
Il codice corretto seguente definisce il buffer in modo che corrisponda alla stessa dimensione del time_t
valore, rimuovendo quindi eventuali presupposti sulle dimensioni di 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));
Se è necessario continuare a usare un valore time a 32 bit, usare il time32_t
tipo nella nuova versione di musl. Il frammento di codice seguente mostra come:
// 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));
libreria curl
Azure Sphere SDK include un subset della libreria di trasferimento multiprotocollo libcurl. È possibile usare questa API per trasferire i dati tramite HTTP/HTTPS. Gli altri protocolli di trasferimento non sono supportati. L'intera superficie dell'API supportata della libreria è definita nei file di intestazione di Azure Sphere SDK.
Informazioni di riferimento sulle API:sito Web libcurl
Percorso del file di intestazione: cartella Sysroots\API set\usr\include\curl (sistema operativo Windows) o sysroots/API set/usr/include/curl (sistema operativo Linux) della directory di installazione di Azure Sphere SDK.