typestar

Tuberías entre procesos en C

Una tubería es un par de descriptores: el hijo escribe y el padre lee.

#include <stdio.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>

int main(void) {
    int fds[2];
    if (pipe(fds) != 0) {
        perror("pipe");
        return 1;
    }

    pid_t pid = fork();
    if (pid == 0) {
        close(fds[0]);
        const char *message = "from the child\n";
        write(fds[1], message, strlen(message));
        close(fds[1]);
        _exit(0);
    }

    close(fds[1]);
    char buffer[64];
    ssize_t n = read(fds[0], buffer, sizeof buffer - 1);
    if (n > 0) {
        buffer[n] = '\0';
        printf("parent read: %s", buffer);
    }
    close(fds[0]);
    wait(NULL);
    return 0;
}

Cómo funciona

  1. Cada lado cierra el extremo que no usa.
  2. El lector ve fin de archivo cuando todos los escritores cerraron.
  3. Olvidar cerrar es la razón clásica por la que un read se cuelga.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
32
Caracteres a escribir
515
Tokens
183
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 105 segundos.

Escribe este fragmento

Paso 3 de 4 en Procesos y señales; paso 9 de 14 en Programación de sistemas.

← Anterior Siguiente →