Tuberías en Linux

Publicado en C/C++, Linux el 25 de June, 2008 por Fran. (Sin comentarios)

Hace unos días expliqué cómo redirigir la salida de un proceso que ejecutemos desde nuestro programa en Windows, hoy voy a explicar cómo hacerlo en Linux (algo que todos deberías de saber ya).

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

/* Proceso hijo */
void
do_child (int data_pipe[])
{
    /* Cerramos la parte de la tubería que no usamos (lectura) */
    close (data_pipe[0]);

    /* Tubería de escritura a salida estándar */
    dup2 (data_pipe[1], STDOUT_FILENO);

    /* Ejecutamos el proceso que queramos (p. ej.: ls) */
    execvp ("ls", NULL);

    perror ("execvp");
}

/* Proceso padre */
void
do_parent (int data_pipe[])
{
    char salida[200];
    int nread;

    /* Cerramos la parte de escritura */
    close (data_pipe[1]);

    /* Leemos la salida */
    nread = read (data_pipe[0], salida, 200);
    while (nread > 0) {
        printf ("%s", salida);
        nread = read (data_pipe[0], salida, 200);
    }

    close (data_pipe[0]);
}

int
main (int argc, char* argv[])
{
    int data_pipe[2];
    int pid;
    int rc;       

    rc = pipe (data_pipe);
    if (rc == -1) {
        perror ("pipe");
        exit (1);
    }

    pid = fork ();
    switch (pid) {
        case -1:
            perror ("fork");
            break;

        /* Proceso hijo */
        case 0:
            do_child (data_pipe);
            break;

        /* Proceso padre */
        default:
            do_parent (data_pipe);
            break;
    }

    return 0;
}

Tuberías en Windows

Publicado en C/C++, Windows el 22 de June, 2008 por Fran. (2 comentarios)

Las tuberías (o pipes, en inglés) son un recurso utilizado para comunicar varios procesos, podríamos decir que es un sistema muy básico de mensajería entre procesos, se trata de un archivo en el que un proceso escribe y otro lee.

Gracias a las tuberías podemos redirigir la entrada estándar, la salida estándar y/o la salida de error de un programa que ejecutemos dentro de nuestro programa, de modo que podamos obtener dicha salida para posteriormente procesarla como queramos.

A continuación, os muestro cómo se redirige la salida estándar y la salida de error, en Windows, de un proceso que ejecutemos dentro de nuestro programa.

Leer el resto »