local/pipe.c

///////////////////////////////////////////////////////////////////////////////
// Filename: easypipe.c
///////////////////////////////////////////////////////////////////////////////
// Purpose: demonstrates the use of UNIX pipes
///////////////////////////////////////////////////////////////////////////////
// History:
// ========
//
// Date     Time     Name      Description   
// -------- -------- --------  ------------------------------------------------
// 96/02/06 02:19:46 muellerg: created
//
///////////////////////////////////////////////////////////////////////////////


// Feature test switches ///////////////////////////// Feature test switches //
    /* NONE */



// System headers /////////////////////////////////////////// System headers //

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>


// Local headers ///////////////////////////////////////////// Local headers //

#include "../common.h"



// Macros /////////////////////////////////////////////////////////// Macros //
    /* NONE */



// File scope objects /////////////////////////////////// File scope objects //
    /* NONE */



// External variables, functions, and classes ///////////// External objects //
    /* NONE */



// Signal catching functions ///////////////////// Signal catching functions //
    /* NONE */



// Structures, unions, and class definitions /////////////////// Definitions //
    /* NONE */



// Functions and class implementation /// Functions and class implementation //
    /* NONE */



// Main /////////////////////////////////////////////////////////////// Main //

int
main(int argc, char *argv[])
{
    error.set_program_name(argv[0]);    

    int     fd[2], nbytes;
    pid_t   childpid;
    char    *string = "Hello, world!";
    char    buffer[80];

    pipe(fd);
    
    if((childpid = fork()) == -1)
        error.system("fork");

    if(childpid == 0)
    {
        // child: close input

        close(fd[0]);


        // write to pipe

        write(fd[1], string, strlen(string));

        return(EXIT_SUCCESS);
    }
    else
    {
        // parent: close output         

        close(fd[1]);


        // read from pipe

        nbytes = read(fd[0], buffer, sizeof(buffer));
        cout << "Received: " << buffer << endl;

        return(EXIT_SUCCESS);
    }
}