次の方法で共有


Azure Sphere ベース API の概要

Azure Sphere アプリケーション ランタイムには、高度なアプリケーション開発に使用できる基本 API が定義された一連の共通ライブラリが含まれています (POSIX ベースの C 標準ライブラリ、curl ベースの HTTP クライアント ライブラリ、Azure IoT C SDK ライブラリ)。

このトピックでは、Azure Sphere に含まれる基本 API を調べる方法と、基本 API のリファレンス ドキュメントを探す場所について説明します。 デバイス固有の API の詳細については、Applibs の API に関するページを参照してください。

サポートされていない関数

Azure Sphere アプリケーション ランタイムの API サーフェスに明示的に含まれている基本 API 関数だけを使うことが重要です。 サポートされていない関数をアプリケーションで呼び出すと、Azure Sphere OS の将来のリリースと互換性がなくなり、デバイスが不安定になる可能性があります。 追加機能のサポートを要求する場合は、 Azure Sphere Community フォーラム を使用して要求を行うことができます。

関数を確認する

関数呼び出しがサポートされているかどうかを判断するには、Visual Studio で IntelliSense のオートコンプリートを使うか、または Azure Sphere SDK のヘッダー ファイルに含まれていることを確認します。 各ライブラリのヘッダー ファイルの場所は、後のセクションで示します。 今後、これらのライブラリの関数が追加または変更された場合は、このトピックでそれらの一覧を示します。

musl C 標準ライブラリ

Azure Sphere には、 musl C 標準ライブラリ (musl libc) が付属しています。 glibc と同様に、musl libc は POSIX に準拠した標準 C ライブラリです。 musl libc と glibc の機能上の違いについては、 musl libc wiki に記載されています。

Azure Sphere のセキュリティ ポリシーとアーキテクチャと一貫性があり、すべての POSIX 関数が公開されるわけではありません。 たとえば、Azure Sphere では、open() 関数や fopen() 関数はサポートされていません。 ライブラリのサポートされている API サーフェス全体は、Azure Sphere SDK のヘッダー ファイルで定義されています。 現在の実装は、将来のリリースで変更される可能性があります。

API リファレンス: POSIX 仕様

ヘッダー ファイルの場所: Sysroots\API set\usr\include (Windows OS) または Sysroots/API set/usr/include (Linux OS) フォルダー。

ヒント

Sysroots\API set\usr\include\sys フォルダーには低レベルのシステム依存 API のヘッダーが含まれていますが、Sysroots\API set\usr\include 親フォルダーには一般的な API のヘッダーが含まれています。 これは Linux の場合も同様です。 一般的な API を使用することをお勧めします。

最新の SDK をダウンロード はこちら

C 標準ライブラリの機能

次の C 標準ライブラリの機能の重要な部分が除外されています。

  • ファイル システムのパス
  • ターミナルのサポート
  • 認証と権限承認
  • Syscall 関数
  • System V (SysV)

fcntl

fcntl(int fd, int cmd, .../* arg */)関数の CMD が公開され、使用できます。

  • F_GETFL - ファイル アクセス モードと関連するファイルステータスフラグを取得します。
  • F_SETFL - arg によって設定されるファイル記述子のファイルステータスフラグを設定します。
  • O_NONBLOCK - F_SETFL専用に公開される引数。

fcntl()関数の標準的な使用方法については、MUSL ライブラリを参照してください。

C 型のtime_t

2038 年の UNIX エポック ロールオーバーの準備として、 musl libc バージョン 1.2 には、32 ビットから 64 ビットまでの C 型 time_t とそのすべての派生物の更新が含まれていました。 この更新プログラムの詳細については、「 musl time64 リリース ノートを参照してください。

20.10 ターゲット API セット (sysroot 7) 以降に対してコンパイルされたアプリケーションでは、64 ビット バージョンの time_tが使用されます。 以前のバージョンの Azure Sphere SDK またはターゲット API セット 20.04 (sysroot 5) 以前を使用してビルドされたアプリケーションでは、引き続き 32 ビット定義のtime_tを使用できます。 Azure Sphere OS の新しいバージョンでは、これらのアプリケーションに同じアプリケーション バイナリ インターフェイス (ABI) が引き続き提供されます。

time_t値のサイズに関する想定を行わないアプリケーション コードは影響を受けません。 ただし、 time_t 値が 32 ビットであると明示的または暗黙的に想定するアプリケーション コード (たとえば、 time_t 値をuint32_tにキャストするなど) は、64 ビット バージョンを反映するように書き換える必要があります。

次のスニペットは、 time_t が 32 ビット値であり、20.10 SDK (sysroot 7) 以降で再コンパイルするとバッファー オーバーランが発生することを前提としています。

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

次の修正されたコードでは、バッファーが time_t 値と同じサイズに定義されているため、 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));

32 ビットの時間値を引き続き使用する必要がある場合は、新しいバージョンの musl で time32_t 型を使用します。 次のコード スニペットは、その方法を示しています。

// 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 ライブラリ

Azure Sphere SDK には、libcurl マルチ プロトコル転送ライブラリのサブセットが含まれています。 この API を使用して、HTTP/HTTPS 経由でデータを転送できます。 他の転送プロトコルはサポートされていません。 ライブラリのサポートされている API サーフェス全体は、Azure Sphere SDK のヘッダー ファイルで定義されています。

API リファレンス: libcurl Web サイト

ヘッダー ファイルの場所: Sysroots\API set\usr\include\curl (Windows OS) フォルダーまたは Azure Sphere SDK インストール ディレクトリの Sysroots/API set/usr/include/curl (Linux OS) フォルダー。

関連項目