Sdílet prostřednictvím


Přehled základních rozhraní API Azure Sphere

Modul runtime aplikací Azure Sphere obsahuje sadu běžných knihoven, které definují základní rozhraní API, která jsou k dispozici pro vývoj aplikací vysoké úrovně: standardní knihovnu jazyka C založenou na POSIX, klientskou knihovnu HTTP založenou na curlu a knihovnu azure IoT C SDK.

Toto téma popisuje, jak určit základní rozhraní API, která jsou součástí Azure Sphere, a kde najít referenční dokumentaci pro základní rozhraní API. Informace o rozhraních API specifických pro zařízení najdete v tématu Rozhraní API služby Applibs.

Nepodporované funkce

Je důležité používat pouze základní funkce rozhraní API, které jsou explicitně zahrnuty do rozhraní API na povrchu modulu runtime aplikace Azure Sphere. Aplikace, které volají nepodporované funkce, nemusí být kompatibilní s budoucími verzemi operačního systému Azure Sphere a mohou způsobit nestabilitu zařízení. Pokud chcete požádat o podporu dalších funkcí, můžete žádost provést pomocí fóra komunity Azure Sphere.

Ověření funkcí

Pokud chcete zjistit, jestli je volání funkce podporované, použijte v sadě Visual Studio automatické dokončování s intelliSense nebo ověřte, že je součástí souborů hlaviček sady Azure Sphere SDK. Umístění souborů hlaviček pro každou knihovnu jsou uvedená v následujících částech. Pokud v těchto knihovnách přidáme nebo upravíme funkce, zobrazíme je v tomto tématu.

Standardní knihovna musl C

Azure Sphere se dodává se standardní knihovnou musl C (musl libc). Podobně jako glibc je musl libc standardní knihovnou jazyka C kompatibilní s POSIX. Funkční rozdíly mezi musl libc a glibc jsou uvedeny na wikiwebu musl libc.

Konzistentní se zásadami zabezpečení a architekturou Azure Sphere, ne všechny funkce POSIX jsou vystavené. Azure Sphere například nepodporuje funkce open() nebo fopen(). Celá podporovaná plocha rozhraní API knihovny je definována v souborech hlaviček sady Azure Sphere SDK. Aktuální implementace se může v budoucí verzi změnit.

Referenční informace k rozhraní API: Specifikace POSIX

Umístění souboru hlaviček: Sysroots\API set\usr\include (Windows OS) nebo Složky Sysroots/API set/usr/include (Linux OS) instalačního adresáře sady Azure Sphere SDK.

Tip

Složka Sysroots\API set\usr\include\sys obsahuje hlavičky pro rozhraní API závislá na systému nízké úrovně, zatímco sysroots\API set\usr\include nadřazená složka obsahuje hlavičky pro obecná rozhraní API. To platí i pro Linux. Doporučujeme používat obecná rozhraní API.

Nejnovější sadu SDK si můžete stáhnout tady.

Funkce standardní knihovny jazyka C

Jsou vyloučeny významné části následujících standardních funkcí knihovny jazyka C:

  • Cesty k systému souborů
  • Podpora terminálu
  • Ověřování a autorizace
  • Funkce Syscall
  • System V (SysV)

fcntl

Cmd funkce fcntl(int fd, int cmd, .../* arg */) jsou vystavené a dostupné pro použití:

  • F_GETFL – načte režim přístupu k souboru a související příznaky stavu souboru.
  • F_SETFL – Nastaví příznaky stavu souboru nastavené pomocí arg pro popisovač souboru.
  • O_NONBLOCK – argument, který je vystaven speciálně pro F_SETFL.

Standardní použití funkce fcntl() naleznete v knihovně MUSL.

time_t typu C

Při přípravě na převrácení epoch UNIXu v roce 2038 obsahovala musl libc verze 1.2 aktualizaci z 32 bitů na 64 bitů, typu time_t C a všech jeho derivátů. Další informace o této aktualizaci najdete v poznámkách k verzi časového limitu 64.

Aplikace zkompilované v sadě rozhraní API 20.10 (sysroot 7) a novější používají 64bitovou time_tverzi . Aplikace vytvořené pomocí starších verzí sady Azure Sphere SDK nebo cílové sady API 20.04 (sysroot 5) nebo starší můžou i nadále používat 32bitovou definici time_t. Nové verze operačního systému Azure Sphere budou těmto aplikacím nadále poskytovat stejné rozhraní ABI (Application Binary Interface).

Kód aplikace, který nepředpokládá velikost time_t hodnoty, není ovlivněn. Kód aplikace, který explicitně nebo implicitně předpokládá, že time_t hodnoty jsou 32bitové (například přetypováním time_t hodnoty na uint32_t) se musí přepsat tak, aby odrážely 64bitovou verzi.

Následující fragment kódu předpokládá, že time_t je 32bitová hodnota a způsobí přetečení vyrovnávací paměti, pokud se znovu zkompiluje se sadou SDK 20.10 (sysroot 7) nebo novější:

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

Následující opravený kód definuje vyrovnávací paměť, která má být stejná jako time_t hodnota, a tím odebere všechny předpoklady o velikosti 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));

Pokud potřebujete dál používat 32bitovou časovou hodnotu, použijte time32_t typ v nové verzi musl. Následující fragment kódu ukazuje, jak:

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

Knihovna curl

Sada Azure Sphere SDK obsahuje podmnožinu knihovny pro přenos více protokolů libcurl. Toto rozhraní API můžete použít k přenosu dat přes PROTOKOL HTTP/HTTPS. Ostatní přenosové protokoly nejsou podporovány. Celá podporovaná plocha rozhraní API knihovny je definována v souborech hlaviček sady Azure Sphere SDK.

Referenční informace k rozhraní API: web libcurl

Umístění souboru hlaviček: Složka Sysroots\API set\usr\include\curl (Windows OS) nebo složka Sysroots/API set/usr/include/curl (Linux OS) instalačního adresáře sady Azure Sphere SDK.

Viz také