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);
}
}