mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
initial import
This commit is contained in:
66
manual/examples/pipe.c
Normal file
66
manual/examples/pipe.c
Normal file
@ -0,0 +1,66 @@
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Read characters from the pipe and echo them to @code{stdout}. */
|
||||
|
||||
void
|
||||
read_from_pipe (int file)
|
||||
{
|
||||
FILE *stream;
|
||||
int c;
|
||||
stream = fdopen (file, "r");
|
||||
while ((c = fgetc (stream)) != EOF)
|
||||
putchar (c);
|
||||
fclose (stream);
|
||||
}
|
||||
|
||||
/* Write some random text to the pipe. */
|
||||
|
||||
void
|
||||
write_to_pipe (int file)
|
||||
{
|
||||
FILE *stream;
|
||||
stream = fdopen (file, "w");
|
||||
fprintf (stream, "hello, world!\n");
|
||||
fprintf (stream, "goodbye, world!\n");
|
||||
fclose (stream);
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
pid_t pid;
|
||||
int mypipe[2];
|
||||
|
||||
/*@group*/
|
||||
/* Create the pipe. */
|
||||
if (pipe (mypipe))
|
||||
{
|
||||
fprintf (stderr, "Pipe failed.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
/*@end group*/
|
||||
|
||||
/* Create the child process. */
|
||||
pid = fork ();
|
||||
if (pid == (pid_t) 0)
|
||||
{
|
||||
/* This is the child process. */
|
||||
read_from_pipe (mypipe[0]);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
else if (pid < (pid_t) 0)
|
||||
{
|
||||
/* The fork failed. */
|
||||
fprintf (stderr, "Fork failed.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is the parent process. */
|
||||
write_to_pipe (mypipe[1]);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user