Compartir vía


Información general sobre las API de Azure Sphere Base

Azure Sphere Application Runtime incluye un conjunto de bibliotecas comunes que definen las API base que están disponibles para el desarrollo de aplicaciones de alto nivel: una biblioteca estándar de C basada en POSIX, una biblioteca cliente HTTP basada en curl y una biblioteca sdk de Azure IoT C.

En este tema se describe cómo determinar qué API base se incluyen en Azure Sphere y dónde encontrar la documentación de referencia de las API base. Para obtener información sobre las API específicas del dispositivo, consulta Api applibs.

Funciones no admitidas

Es importante usar solo las funciones de API base que se incluyen explícitamente en la superficie de API de Azure Sphere Application Runtime. Es posible que las aplicaciones que llaman funciones no compatibles con futuras versiones del SO Azure Sphere no sean compatibles y que causen inestabilidad en el dispositivo. Si desea solicitar soporte técnico para funciones adicionales, puede usar el foro de la Comunidad Azure Sphere para realizar la solicitud.

Comprobar funciones

Para determinar si se admite una llamada de función, use Autocompletar con IntelliSense en Visual Studio o compruebe que se incluye en los archivos de encabezado del SDK de Azure Sphere. Las ubicaciones de los archivos de encabezado de cada biblioteca se muestran en las secciones siguientes. Si agregamos o modificamos funciones en estas bibliotecas, las enumeraremos en este tema.

biblioteca estándar musl C

Azure Sphere incluye la biblioteca estándar musl C (musl libc). Al igual que glibc, musl libc es una biblioteca C estándar compatible con POSIX. Las diferencias funcionales entre musl libc y glibc se enumeran en el wiki musl libc.

De acuerdo con la directiva y arquitectura de seguridad de Azure Sphere, no todas las funciones POSIX están expuestas. Por ejemplo, Azure Sphere no admite las funciones open() o fopen(). Toda la superficie de API compatible de la biblioteca se define en los archivos de encabezado del SDK azure Sphere. La implementación actual puede cambiar en una versión futura.

Referencia de API:Especificación POSIX

Ubicación del archivo de encabezado: Sysroots\API set\usr\include (Windows OS) o carpetas Sysroots/API set/usr/include (SO Linux) de tu directorio de instalación del SDK de Azure Sphere.

Propina

La carpeta Sysroots\API set\usr\include\sys contiene encabezados para API dependientes del sistema de bajo nivel, mientras que sysroots\API set\usr\include carpeta principal contiene encabezados para API generales. Esto es igualmente cierto para Linux. Te recomendamos que uses las API generales.

Puedes descargar el SDK más reciente aquí.

Características de la biblioteca estándar C

Se excluyen partes significativas de las siguientes características de la biblioteca estándar C:

  • Rutas del sistema de archivos
  • Soporte terminal
  • Autenticación y autorización
  • Funciones Syscall
  • Sistema V (SysV)

fcntl

Las CMD de función fcntl(int fd, int cmd, .../* arg */) expuestas y disponibles para su uso son las siguientes:

  • F_GETFL: recupera el modo de acceso a archivos y las marcas de estado de archivo relacionadas.
  • F_SETFL: establece marcas de estado de archivo, como establece el arg, para un descriptor de archivo.
  • O_NONBLOCK - Argumento que se expone específicamente para F_SETFL.

Para el uso estándar de la función fcntl(), consulte la biblioteca MUSL.

Tipo C time_t

En preparación para el lanzamiento de la época UNIX en 2038, musl libc versión 1.2 incluyó una actualización, de 32 bits a 64 bits, del tipo time_t C y todos sus derivados. Para obtener más información sobre esta actualización, consulte las notas de la versión musl time64.

Las aplicaciones compiladas con el conjunto de API de destino 20.10 (sysroot 7) y posteriormente usan la versión de 64 bits de time_t. Las aplicaciones creadas con versiones anteriores del SDK de Azure Sphere o del conjunto de API de destino 20.04 (sysroot 5) o versiones anteriores pueden seguir usando una definición de time_t de 32 bits. Las nuevas versiones del sistema operativo Azure Sphere continuarán proporcionando la misma interfaz binaria de aplicación (ABI) a estas aplicaciones.

El código de aplicación que no hace suposiciones sobre el tamaño de un time_t valor no se ve afectado. Sin embargo, el código de la aplicación que asume explícita o implícitamente que time_t los valores son de 32 bits (por ejemplo, al convertir un time_t valor en un uint32_t) debe volver a escribirse para reflejar la versión de 64 bits.

El siguiente fragmento asume que time_t es un valor de 32 bits y provocará una saturación de búfer si se vuelve a compilar con el SDK de 20.10 (sysroot 7) o posterior:

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

El siguiente código corregido define que el búfer tenga el mismo tamaño que el time_t valor, quitando así cualquier suposición sobre el tamaño de 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));

Si necesita seguir usando un valor de tiempo de 32 bits, use el time32_t tipo en la nueva versión de musl. El siguiente fragmento de código muestra cómo:

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

biblioteca de rizos

El SDK de Azure Sphere incluye un subconjunto de la biblioteca de transferencia de varios protocolos libcurl. Puedes usar esta API para transferir datos a través de HTTP/HTTPS. Los otros protocolos de transferencia no son compatibles. Toda la superficie de API compatible de la biblioteca se define en los archivos de encabezado del SDK azure Sphere.

Api reference:libcurl website

Ubicación del archivo de encabezado: Sysroots\API set\usr\include\curl (Sistema operativo Windows) o la carpeta Sysroots/API set/usr/include/curl (SO Linux) del directorio de instalación de Azure Sphere SDK.

Consulte también