Volver a la página principal
lunes 6 enero 2025
15

Cómo verificar si un puerto de entrada está disponible en C con inb()

La función inb() forma parte de las operaciones de entrada/salida en sistemas operativos basados en Linux. Se utiliza para leer un byte de datos desde un puerto de E/S especificado. Por lo general, es necesario incluir la biblioteca <sys/io.h> para usarla, y los permisos adecuados para acceder a los puertos de hardware.

Sintaxis de inb()

unsigned char inb(unsigned short int port);
Parámetro Descripción Tipo
port Número del puerto de entrada que se lee. unsigned short int

El valor devuelto es un byte (unsigned char) leído desde el puerto especificado.

Pasos para usar inb():

1. Incluir la biblioteca <sys/io.h>.

2. Usar ioperm() o iopl() para obtener permisos de acceso a puertos.

3. Leer datos del puerto usando inb().

Ejemplo práctico de uso

A continuación, un ejemplo para leer datos desde el puerto 0x60 (usualmente asociado con el teclado en sistemas x86):

#include <stdio.h>
#include <sys/io.h>

int main() {
    unsigned short port = 0x60;
    unsigned char data;

    // Habilitar acceso al rango de puertos
    if (ioperm(port, 1, 1)) {
        perror("No se pudo obtener acceso al puerto");
        return 1;
    }

    // Leer un byte desde el puerto
    data = inb(port);
    printf("Dato leído del puerto 0x60: 0x%02X\n", data);

    // Deshabilitar acceso al rango de puertos
    if (ioperm(port, 1, 0)) {
        perror("No se pudo deshabilitar acceso al puerto");
        return 1;
    }

    return 0;
}

Consideraciones

  • Es necesario ejecutar el programa con permisos de superusuario.
  • El uso indebido de inb() puede causar errores críticos, ya que interactúa directamente con el hardware.
Etiquetas:
C
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer