Aracılığıyla paylaş


Azure Sphere Temel API'lerine genel bakış

Azure Sphere Uygulama Çalışma Zamanı, üst düzey uygulama geliştirme için kullanılabilen temel API'leri tanımlayan bir dizi ortak kitaplık içerir: POSIX tabanlı C standart kitaplığı, curl tabanlı HTTP istemci kitaplığı ve Azure IoT C SDK kitaplığı.

Bu konuda, Azure Sphere'a hangi temel API'lerin dahil edildiği ve temel API'ler için başvuru belgelerinin nerede bulunacağı açıklanır. Cihaza özgü API'ler hakkında bilgi için bkz. Uygulama API'leri.

Desteklenmeyen işlevler

Yalnızca Azure Sphere Uygulama Çalışma Zamanı'nın API yüzeyine açıkça dahil edilen temel API işlevlerini kullanmak önemlidir. Desteklenmeyen işlevleri çağıran uygulamalar, Azure Sphere işletim sisteminin gelecek sürümleriyle uyumlu olmayabilir ve cihaz dengesizliklerine neden olabilir. Ek işlevler için destek istemek istiyorsanız, isteği yapmak için Azure Sphere Topluluğu forumunu kullanabilirsiniz.

İşlevleri doğrulama

İşlev çağrısının desteklenip desteklenmediğini belirlemek için Visual Studio'da IntelliSense ile otomatik tamamlama özelliğini kullanın veya Bunun Azure Sphere SDK üst bilgi dosyalarına dahil olduğunu doğrulayın. Her kitaplığın üst bilgi dosyalarının konumları aşağıdaki bölümlerde listelenmiştir. Bu kitaplıklara işlevler ekler veya değiştirirsek, bunları bu konuda listeleyeceğiz.

musl C standart kitaplığı

Azure Sphere, musl C standart kitaplığı (musl libc) ile birlikte verilir. Glibc gibi musl libc de POSIX uyumlu bir standart C kitaplığıdır. musl libc ve glibc arasındaki işlevsel farklar musl libc wiki'de listelenmiştir.

Azure Sphere güvenlik ilkesi ve mimarisiyle tutarlıdır, tüm POSIX işlevleri gösterilmez. Örneğin, Azure Sphere open() veya fopen() işlevlerini desteklemez. Kitaplığın desteklenen API yüzeyinin tamamı Azure Sphere SDK üst bilgi dosyalarında tanımlanır. Geçerli uygulama gelecekteki bir sürümde değişebilir.

API başvurusu:POSIX belirtimi

Üst bilgi dosyası konumu: Azure Sphere SDK yükleme dizininizin Sysroots\API set\usr\include (Windows OS) veya Sysroots/API set/usr/include (Linux OS) klasörleri.

Ipucu

Sysroots\API set\usr\include\sys klasörü düşük düzeyli, sisteme bağımlı API'ler için üst bilgiler içerirken Sysroots\API set\usr\include üst klasörü genel API'ler için üst bilgiler içerir. Bu, Linux için de aynı şekilde geçerlidir. Genel API'leri kullanmanızı öneririz.

En son SDK'ları buradan indirebilirsiniz.

C standart kitaplık özellikleri

Aşağıdaki C standart kitaplık özelliklerinin önemli bölümleri dışlanır:

  • Dosya sistemi yolları
  • Terminal desteği
  • Kimlik doğrulaması ve yetkilendirme
  • Syscall işlevleri
  • Sistem V (SysV)

fcntl

Kullanıma sunulan ve kullanıma sunulan fcntl(int fd, int cmd, .../* arg */) işlevi CMD'leri şunlardır:

  • F_GETFL - Dosya erişim modunu ve ilgili dosya durumu bayraklarını alır.
  • F_SETFL - Dosya tanımlayıcısı için arg tarafından ayarlanan dosya durumu bayraklarını ayarlar.
  • O_NONBLOCK - Özellikle F_SETFL için kullanıma sunulan bağımsız değişken.

fcntl() işlevinin standart kullanımı için MUSL kitaplığına bakın.

C türü time_t

2038'de UNIX dönem geçişi için hazırlık olarak , musl libc sürüm 1.2 , C türünde time_t ve tüm türevlerinde 32 bitten 64 bit'e kadar bir güncelleştirme içeriyor. Bu güncelleştirme hakkında daha fazla bilgi için bkz. musl time64 Sürüm Notları.

20.10 hedef API kümesine (sysroot 7) karşı derlenen uygulamalar 64 bit sürümünü time_tkullanır. Azure Sphere SDK'sının önceki sürümleri veya hedef API kümesi 20.04 (sysroot 5) veya önceki sürümleri kullanılarak oluşturulan uygulamalar, time_t 32 bit tanımını kullanmaya devam edebilir. Azure Sphere işletim sisteminin yeni sürümleri bu uygulamalara aynı Uygulama İkili Arabirimini (ABI) sağlamaya devam edecektir.

Bir time_t değerin boyutu hakkında hiçbir varsayımda bulunmayan uygulama kodu etkilenmez. Ancak, açıkça veya örtük olarak değerlerin 32 bit olduğunu time_t varsayan uygulama kodu (örneğin, bir time_t değeri bir uint32_t dönüştürerek) 64 bit sürümünü yansıtacak şekilde yeniden yazılmalıdır.

Aşağıdaki kod parçacığı bunun 32 bitlik bir değer olduğunu time_t varsayar ve 20.10 SDK (sysroot 7) veya üzeri ile yeniden derlenirse arabellek taşmasına neden olur:

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

Aşağıdaki düzeltilmiş kod, arabellek değerinin boyutuyla aynı olacak şekilde time_t tanımlayarak boyutuyla time_tilgili varsayımları kaldırır:

// 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 bit zaman değeri kullanmaya devam etmeniz gerekiyorsa musl'un yeni sürümündeki türünü kullanın time32_t . Aşağıdaki kod parçacığı şunları gösterir:

// 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 kitaplığı

Azure Sphere SDK'sı, libcurl çoklu protokol aktarım kitaplığının bir alt kümesini içerir. Http/HTTPS üzerinden veri aktarmak için bu API'yi kullanabilirsiniz. Diğer aktarım protokolleri desteklenmez. Kitaplığın desteklenen API yüzeyinin tamamı Azure Sphere SDK üst bilgi dosyalarında tanımlanır.

API başvurusu:libcurl web sitesi

Üst bilgi dosyası konumu: Azure Sphere SDK yükleme dizininin Sysroots\API set\usr\include\curl (Windows OS) klasörü veya Sysroots/API set/usr/include/curl (Linux OS) klasörü.

Ayrıca bkz.