API di base

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 basata su POSIX C, una libreria client HTTP basata su curl e una libreria 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 le API di base. Per informazioni sulle API specifiche del dispositivo, vedi Applicazioni API.

Funzioni non supportate

È importante usare solo le funzioni dell'API di base incluse in modo esplicito nella superficie delle 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à del dispositivo. Se desideri richiedere supporto per altre funzioni, puoi utilizzare il forum della community di Azure Sphere per effettuare 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. Le posizioni dei file di intestazione per ogni raccolta sono elencate nelle sezioni seguenti. Se aggiungiamo o modifichiamo funzioni in queste raccolte, le elenchiamo in questo argomento.

musl C libreria standard

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 libc musl.

Coerente con i criteri di sicurezza e l'architettura di Azure Sphere, non tutte le funzioni POSIX vengono esposte. Ad esempio, Azure Sphere non supporta le funzioni open() o fopen(). L'intera superficie API supportata della libreria è definita nei file di intestazione di Azure Sphere SDK. L'implementazione corrente potrebbe cambiare in una versione futura.

Riferimento API:specifica POSIX

Percorso del file di intestazione: 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.

Mancia

La cartella Sysroots\API set\usr\include\sys contiene intestazioni per LE API dipendenti dal sistema di basso livello, mentre la cartella Sysroots\API set\usr\include parent contiene intestazioni per le API generali. Questo vale anche per Linux. È consigliabile usare le API generali.

Puoi scaricare l'SDK più recente qui.

C Funzionalità delle raccolte standard

Sono escluse parti significative delle seguenti funzionalità della libreria standard C:

  • Percorsi del file system
  • Supporto terminal
  • Autenticazione e autorizzazione
  • Funzioni Syscall
  • Sistema V (SysV)

fcntl

I CMD della funzione 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 relativi flag di stato dei file.
  • F_SETFL: imposta i flag di stato del file, impostati dall'arg, per un descrittore di file.
  • O_NONBLOCK: argomento esposto in modo specifico per F_SETFL.

Per l'uso standard della funzione fcntl( ), vedere la libreria MUSL.

Digitare C time_t

In preparazione del rollover di UNIX epoch nel 2038, musl libc versione 1.2 incluso un aggiornamento, da 32 bit a 64 bit, di tipo time_t C e tutti i suoi derivati. Per altre informazioni su questo aggiornamento, vedi Note sulla versione di musl time64.

Le applicazioni compilate in base al set di API di destinazione 20.10 (sysroot 7) e successivamente utilizzano la versione a 64 bit di time_t. Le applicazioni create con versioni precedenti dell'SDK azure sphere o dell'API di destinazione impostata 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 ABI (Application Binary Interface) a queste applicazioni.

Il codice dell'applicazione che non ipotizza la dimensione di un time_t valore non viene influenzato. 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 a un uint32_t) deve essere riscritto per riflettere la versione a 64 bit.

Il frammento seguente presuppone che time_t sia un valore a 32 bit e causerà 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 seguente codice corretto definisce il buffer con le stesse dimensioni del time_t valore, rimuovendo così tutte le ipotesi circa la dimensione 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 di ora 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 di riccioli

Azure Sphere SDK include un sottoinsieme della libreria di trasferimento protocollo multiprotocollo libcurl. Puoi utilizzare questa API per trasferire i dati tramite HTTP/HTTPS. Gli altri protocolli di trasferimento non sono supportati. L'intera superficie API supportata della libreria è definita nei file di intestazione di Azure Sphere SDK.

Riferimento API:sito Web libcurl

Percorso del file di intestazione: 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.

Vedere anche