SDK Multiplataforma en C logo

SDK Multiplataforma en C

Osbs

❮ Anterior
Siguiente ❯

No hay una distinción clara entre el software del sistema operativo y el software que se ejecuta sobre él. Jim Allchin


Funciones

uint32_t(*FPtr_thread_main (...))
voidosbs_start (void)
voidosbs_finish (void)
platform_tosbs_platform (void)
win_tosbs_windows (void)
endian_tosbs_endian (void)

Tipos y Constantes

enumplatform_t
enumdevice_t
enumwin_t
enumendian_t
enumweek_day_t
enummonth_t
enumfile_type_t
enumfile_mode_t
enumfile_seek_t
enumferror_t
enumperror_t
enumserror_t
structDate
structDir
structFile
structMutex
structProc
structDLib
structThread
structSocket

osbs (Operating System Basic Services) es un wrapper portable que permite a las aplicaciones la comunicación con el núcleo del sistema operativo a nivel de procesos, memoria, archivos y redes. Esta comunicación se lleva a cabo a través de una serie de llamadas al sistema (Figura 1) que varían según el sistema operativo para el que estemos programando. Es el API no gráfico de más bajo nivel para comunicarse con dispositivos de hardware y acceder a los recursos de la máquina. Por debajo se encuentran los controladores de dispositivos (drivers) administrados directamente por el kernel, a los que las aplicaciones tienen vetado el acceso.

Esquema que muestra como la librería osbs conecta con el hardware a través de las llamadas al sistema.
Figura 1: Las llamadas al sistema son la puerta de entrada al núcleo del sistema operativo.

Darwin, el kernel de macOS, y Linux son sistemas tipo-Unix, por tanto, comparten el mismo conjunto de llamadas al sistema (con pequeñas diferencias). Pero Windows presenta una arquitectura y juego de funciones radicalmente diferente. La librería osbs de NAppGUI no es más que una pequeña envoltura que internamente maneja estas diferencias y provee una vía común para acceder a los mismos recursos en diferentes plataformas (Figura 2). Solo depende de Sewer y sus funcionalidades se han dividido en diferentes módulos:

❮ Anterior
Siguiente ❯

enum platform_t

Sistemas operativos soportados por NAppGUI.

enum platform_t
{
    ekWINDOWS,
    ekMACOS,
    ekLINUX,
    ekIOS
};
ekWINDOWS

Microsoft Windows.

ekMACOS

Apple macOS.

ekLINUX

GNU/Linux.

ekIOS

Apple iOS.


enum device_t

Tipo de dispositivo.

enum device_t
{
    ekDESKTOP,
    ekPHONE,
    ekTABLET
};
ekDESKTOP

Ordenador de escritorio o portátil.

ekPHONE

Teléfono.

ekTABLET

Tableta.


enum win_t

Versiones de Microsoft Windows.

enum win_t
{
    ekWIN_9x,
    ekWIN_NT4,
    ekWIN_2K,
    ekWIN_XP,
    ekWIN_XP1,
    ekWIN_XP2,
    ekWIN_XP3,
    ekWIN_VI,
    ekWIN_VI1,
    ekWIN_VI2,
    ekWIN_7,
    ekWIN_71,
    ekWIN_8,
    ekWIN_81,
    ekWIN_10,
    ekWIN_NO
};
ekWIN_9x

Windows 95, 98 or ME.

ekWIN_NT4

Windows NT4.

ekWIN_2K

Windows 2000.

ekWIN_XP

Windows XP.

ekWIN_XP1

Windows XP Service Pack 1.

ekWIN_XP2

Windows XP Service Pack 2.

ekWIN_XP3

Windows XP Service Pack 3.

ekWIN_VI

Windows Vista.

ekWIN_VI1

Windows Vista Service Pack 1.

ekWIN_VI2

Windows Vista Service Pack 2.

ekWIN_7

Windows 7.

ekWIN_71

Windows 7 Service Pack 1.

ekWIN_8

Windows 8.

ekWIN_81

Windows 8 Service Pack 1.

ekWIN_10

Windows 10.

ekWIN_NO

El sistema no es Windows.


enum endian_t

Representa el Orden de bytes, o como los datos multi-byte son almacenados en memoria.

enum endian_t
{
    ekLITEND,
    ekBIGEND
};
ekLITEND

Little endian. El byte más bajo primero.

ekBIGEND

Big endian. El byte más alto primero.


enum week_day_t

Día de la semana.

enum week_day_t
{
    ekSUNDAY,
    ekMONDAY,
    ekTUESDAY,
    ekWEDNESDAY,
    ekTHURSDAY,
    ekFRIDAY,
    ekSATURDAY
};
ekSUNDAY

Domingo.

ekMONDAY

Lunes.

ekTUESDAY

Martes.

ekWEDNESDAY

Miércoles.

ekTHURSDAY

Jueves.

ekFRIDAY

Viernes.

ekSATURDAY

Sábado.


enum month_t

Mes.

enum month_t
{
    ekJANUARY,
    ekFEBRUARY,
    ekMARCH,
    ekAPRIL,
    ekMAY,
    ekJUNE,
    ekJULY,
    ekAUGUST,
    ekSEPTEMBER,
    ekOCTOBER,
    ekNOVEMBER,
    ekDECEMBER
};
ekJANUARY

Enero.

ekFEBRUARY

Febrero.

ekMARCH

Marzo.

ekAPRIL

Abril.

ekMAY

Mayo.

ekJUNE

Junio.

ekJULY

Julio.

ekAUGUST

Agosto.

ekSEPTEMBER

Septiembre.

ekOCTOBER

Octubre.

ekNOVEMBER

Noviembre.

ekDECEMBER

Diciembre.


enum file_type_t

Tipo de archivo.

enum file_type_t
{
    ekARCHIVE,
    ekDIRECTORY,
    ekOTHERFILE
};
ekARCHIVE

Archivo ordinario.

ekDIRECTORY

Directorio.

ekOTHERFILE

Otro tipo de archivo reservado para el sistema operativo (dispositivos, tuberías, etc).


enum file_mode_t

Diferentes modos de abrir un archivo.

enum file_mode_t
{
    ekREAD,
    ekWRITE,
    ekAPPEND
};
ekREAD

Solo lectura.

ekWRITE

Lectura y escritura.

ekAPPEND

Escritura al final del archivo.


enum file_seek_t

Posición inicial del puntero en bfile_seek.

enum file_seek_t
{
    ekSEEKSET,
    ekSEEKCUR,
    ekSEEKEND
};
ekSEEKSET

Inicio del archivo.

ekSEEKCUR

Posición actual del puntero.

ekSEEKEND

Final del archivo.


enum ferror_t

Códigos de error manipulando archivos.

enum ferror_t
{
    ekFEXISTS,
    ekFNOPATH,
    ekFNOFILE,
    ekFBIGNAME,
    ekFNOFILES,
    ekFNOEMPTY,
    ekFNOACCESS,
    ekFLOCK,
    ekFBIG,
    ekFSEEKNEG,
    ekFUNDEF,
    ekFOK
};
ekFEXISTS

El archivo ya existe.

ekFNOPATH

El directorio no existe.

ekFNOFILE

El archivo no existe.

ekFBIGNAME

El nombre del archivo excede la capacidad del buffer para almacenarlo.

ekFNOFILES

No hay más archivos cuando recorremos un directorio. bfile_dir_get.

ekFNOEMPTY

Se está tratando de eliminar un directorio no vacío. hfile_dir_destroy.

ekFNOACCESS

No se puede acceder al archivo (posiblemente por falta de permisos).

ekFLOCK

El archivo está siendo utilizado por otro proceso.

ekFBIG

El archivo es muy grande. Puede aparecer en funciones que no puedan manejar archivos de más de 4Gb.

ekFSEEKNEG

Posición negativa dentro de un archivo. Ver bfile_seek.

ekFUNDEF

No hay más información acerca del error.

ekFOK

No hay error.


enum perror_t

Códigos de error trabajando con procesos.

enum perror_t
{
    ekPPIPE,
    ekPEXEC,
    ekPOK
};
ekPPIPE

Error en el canal de E/S estándar.

ekPEXEC

Error al lanzar el proceso. Seguramente el comando es inválido.

ekPOK

No hay error.


enum serror_t

Código de error en comunicaciones de red.

enum serror_t
{
    ekSNONET,
    ekSNOHOST,
    ekSTIMEOUT,
    ekSSTREAM,
    ekSUNDEF,
    ekSOK
};
ekSNONET

No hay conexión a Internet en el dispositivo.

ekSNOHOST

No se puede conectar con el servidor remoto.

ekSTIMEOUT

Se ha excedido el tiempo máximo de espera por la conexión.

ekSSTREAM

Error en el canal E/S al leer o escribir.

ekSUNDEF

No hay más información acerca del error.

ekSOK

No hay error.


struct Date

Estructura pública que contiene los campos de una marca temporal (fecha + hora) para su acceso de forma directa.

struct Date
{
    int16_t year;
    uint8_t month;
    uint8_t wday;
    uint8_t mday;
    uint8_t hour;
    uint8_t minute;
    uint8_t second;
};
year

El año.

month

El mes (1-12). month_t.

wday

El día de la semana (0-6). week_day_t.

mday

El día del mes (1-31).

hour

La hora (0-23).

minute

El minuto (0-59).

second

El segundo (0-59).


struct Dir

Representa un directorio abierto, por el que se puede navegar. bfile_dir_open.

struct Dir;

struct File

Manejador de fichero en disco. bfile_open.

struct File;

struct Mutex

Mecanismo de exclusión mutua (mutex) utilizado para controlar el acceso concurrente a un recurso. Cerrojos.

struct Mutex;

struct Proc

Representa un proceso en ejecución, con el que el programa principal puede comunicarse utilizando los canales E/S estándar. bproc_exec.

struct Proc;

struct DLib

Representa una librería cargada de forma dinámica en el proceso. dlib_open.

struct DLib;

struct Thread

Representa un hilo de ejecución, lanzado desde el proceso principal. bthread_create.

struct Thread;

struct Socket

Manejador de un socket o conexión en red. bsocket_connect.

struct Socket;

FPtr_thread_main

Prototipo de function de inicio de una hebra de ejecución (thread main). bthread_create.

uint32_t
(*FPtr_thread_main)(type *data);
data

Datos pasados a la función main de la hebra.

Retorna

El valor de retorno de la hebra.


osbs_start ()

Inicia la librería osbs, reservando espacio para las estructuras internas globales.

void
osbs_start(void);

osbs_finish ()

Finaliza la librería osbs, liberando el espacio de las estructuras internas globales.

void
osbs_finish(void);

osbs_platform ()

Obtiene el sistema operativo en el que está corriendo la aplicación.

platform_t
osbs_platform(void);

Retorna

La plataforma.


osbs_windows ()

Obtiene la versión de Windows.

win_t
osbs_windows(void);

Retorna

La versión de Microsoft Windows.


osbs_endian ()

Obtiene el Orden de bytes de la plataforma.

endian_t
osbs_endian(void);

Retorna

El orden de bytes en tipos de datos multi-byte.

❮ Anterior
Siguiente ❯