Protocolos TCP/IP - Inter-Process Communication / Internet Protocol

IPC/IP

  • IP (Internet Protocol) es el protocolo que define cómo se transfieren los datos entre dispositivos en una red. Forma parte del conjunto de protocolos TCP/IP y se encarga de la dirección y el enrutamiento de paquetes de datos.
  • IPC (Inter-Process Communication) es un concepto relacionado con la comunicación entre procesos en un mismo sistema operativo o red, y se puede implementar mediante métodos como sockets, tuberías, colas de mensajes, etc.
Para qué sirve:
  • IP: Para dirigir y enviar paquetes entre dispositivos en redes locales o globales (Internet).
  • IPC: Para que los procesos colaboren y compartan información dentro de un sistema.

Ejemplo de IPC: Comunicación entre procesos con tuberías

El siguiente ejemplo muestra cómo dos procesos (padre e hijo) se comunican utilizando una tubería para enviar y recibir mensajes.

Código: IPC con tuberías

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define BUFFER_SIZE 256

int main() {
    int pipefds[2];
    pid_t pid;
    char write_msg[BUFFER_SIZE] = "Hola desde el proceso padre.";
    char read_msg[BUFFER_SIZE];

    // Crear la tubería
    if (pipe(pipefds) == -1) {
        perror("Error al crear la tubería");
        exit(EXIT_FAILURE);
    }

    // Crear un proceso hijo
    pid = fork();

    if (pid < 0) {
        perror("Error al hacer fork");
        exit(EXIT_FAILURE);
    }

    if (pid == 0) {  // Proceso hijo
        close(pipefds[1]);  // Cerrar el extremo de escritura
        read(pipefds[0], read_msg, BUFFER_SIZE);  // Leer desde la tubería
        printf("Proceso hijo recibió: %s\n", read_msg);
        close(pipefds[0]);  // Cerrar el extremo de lectura
    } else {  // Proceso padre
        close(pipefds[0]);  // Cerrar el extremo de lectura
        write(pipefds[1], write_msg, strlen(write_msg) + 1);  // Escribir en la tubería
        close(pipefds[1]);  // Cerrar el extremo de escritura
        wait(NULL);  // Esperar al proceso hijo
    }

    return 0;
}

Explicación:

  1. Creación de la tubería: pipe(pipefds) crea dos extremos: uno para lectura (pipefds[0]) y otro para escritura (pipefds[1]).
  2. Comunicación padre-hijo: El padre escribe un mensaje en la tubería, y el hijo lo lee.
  3. Sincronización: wait(NULL) asegura que el proceso padre espere a que el hijo termine antes de continuar.
  4. Ventajas del IPC: Facilita la comunicación eficiente entre procesos que necesitan colaborar o compartir datos.





Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...