Bagikan melalui


Gambaran umum API Dasar Azure Sphere

Runtime Aplikasi Azure Sphere menyertakan sekumpulan pustaka umum yang menentukan API dasar yang tersedia untuk pengembangan aplikasi tingkat tinggi: pustaka standar C berbasis POSIX, pustaka klien HTTP berbasis curl, dan pustaka Azure IoT C SDK.

Topik ini menjelaskan cara menentukan API dasar mana yang disertakan dalam Azure Sphere, dan tempat menemukan dokumentasi referensi untuk API dasar. Untuk informasi tentang API khusus perangkat, lihat API Applibs.

Fungsi yang tidak didukung

Penting untuk hanya menggunakan fungsi API dasar yang secara eksplisit disertakan dalam permukaan API Runtime Aplikasi Azure Sphere. Aplikasi yang memanggil fungsi yang tidak didukung mungkin tidak kompatibel dengan rilis OS Azure Sphere di masa mendatang dan dapat menyebabkan ketidakstabilan perangkat. Jika Anda ingin meminta dukungan untuk fungsi tambahan, Anda dapat menggunakan forum Komunitas Azure Sphere untuk membuat permintaan.

Memverifikasi fungsi

Untuk menentukan apakah panggilan fungsi didukung, gunakan lengkapi otomatis dengan IntelliSense di Visual Studio atau verifikasi bahwa panggilan tersebut disertakan dalam file header Azure Sphere SDK. Lokasi file header untuk setiap pustaka tercantum di bagian di bawah ini. Jika kita menambahkan atau mengubah fungsi dalam pustaka ini, kita akan mencantumkannya dalam topik ini.

pustaka standar musl C

Azure Sphere dikirim dengan pustaka standar musl C (musl libc). Seperti glibc, musl libc adalah pustaka C standar yang mematuhi POSIX. Perbedaan fungsional antara musl libc dan glibc tercantum dalam wiki musl libc.

Konsisten dengan kebijakan dan arsitektur keamanan Azure Sphere, tidak semua fungsi POSIX diekspos. Misalnya, Azure Sphere tidak mendukung fungsi open() atau fopen(). Seluruh permukaan API yang didukung dari pustaka ditentukan dalam file header Azure Sphere SDK. Implementasi saat ini dapat berubah dalam rilis mendatang.

Referensi API: Spesifikasi POSIX

Lokasi file header: Sysroots\API set\usr\include (WINDOWS OS) atau Sysroots/API set/usr/include (Linux OS) folder direktori penginstalan Azure Sphere SDK Anda.

Tip

Folder Sysroots\API set\usr\include\sys berisi header untuk API tingkat rendah yang bergantung pada sistem sedangkan Sysroots\API set\usr\include folder induk berisi header untuk API umum. Ini juga berlaku untuk Linux. Kami menyarankan agar Anda menggunakan API umum.

Anda dapat mengunduh SDK terbaru di sini.

Fitur pustaka standar C

Bagian signifikan dari fitur pustaka standar C berikut dikecualikan:

  • Jalur sistem file
  • Dukungan terminal
  • Autentikasi dan otorisasi
  • Fungsi Syscall
  • Sistem V (SysV)

fcntl

CMD fungsi fcntl(int fd, int cmd, .../* arg */) yang diekspos dan tersedia untuk digunakan adalah sebagai berikut:

  • F_GETFL - Mengambil mode akses file dan bendera status file terkait.
  • F_SETFL - Mengatur bendera status file, seperti yang ditetapkan oleh arg, untuk pendeskripsi file.
  • O_NONBLOCK - Argumen yang diekspos khusus untuk F_SETFL.

Untuk penggunaan standar fungsi fcntl(), lihat pustaka MUSL.

time_t tipe C

Dalam persiapan untuk rollover epoch UNIX pada tahun 2038, musl libc versi 1.2 menyertakan pembaruan, dari 32 bit hingga 64 bit, jenis C time_t dan semua turunannya. Untuk informasi selengkapnya tentang pembaruan ini, lihat Catatan Rilis musl time64.

Aplikasi yang dikompilasi terhadap set API target 20.10 (sysroot 7) dan yang lebih baru menggunakan versi 64-bit .time_t Aplikasi yang dibangun menggunakan versi Azure Sphere SDK yang lebih lama atau API target yang ditetapkan 20.04 (sysroot 5) atau yang lebih lama dapat terus menggunakan definisi 32-bit time_t. Versi baru OS Azure Sphere akan terus menyediakan Application Binary Interface (ABI) yang sama untuk aplikasi ini.

Kode aplikasi yang tidak membuat asumsi tentang ukuran time_t nilai tidak terpengaruh. Namun, kode aplikasi yang secara eksplisit atau implisit mengasumsikan bahwa time_t nilai adalah 32-bit (misalnya, dengan mentransmisikan time_t nilai ke uint32_t) harus ditulis ulang untuk mencerminkan versi 64-bit.

Cuplikan berikut mengasumsikan bahwa time_t adalah nilai 32-bit dan akan menyebabkan buffer diserbu jika dikompilasi ulang dengan SDK 20.10 (sysroot 7) atau yang lebih baru:

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

Kode yang dikoreksi berikut mendefinisikan buffer menjadi ukuran yang sama dengan time_t nilai, sehingga menghapus asumsi apa pun tentang ukuran 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));

Jika Anda perlu terus menggunakan nilai waktu 32-bit, gunakan time32_t jenis dalam versi baru musl. Cuplikan kode berikut menunjukkan caranya:

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

pustaka curl

Azure Sphere SDK menyertakan subset pustaka transfer multi protokol libcurl. Anda dapat menggunakan API ini untuk mentransfer data melalui HTTP/HTTPS. Protokol transfer lainnya tidak didukung. Seluruh permukaan API yang didukung dari pustaka ditentukan dalam file header Azure Sphere SDK.

Referensi API: situs web libcurl

Lokasi file header: Sysroots\API set\usr\include\curl (Windows OS) folder atau Sysroots/API set/usr/include/curl (Linux OS) folder direktori penginstalan Azure Sphere SDK.

Lihat juga