mirror of https://github.com/mkerrisk/man-pages
Added example program.
This commit is contained in:
parent
48afe71d57
commit
15740f8afd
56
man2/pipe.2
56
man2/pipe.2
|
@ -60,6 +60,62 @@ Too many file descriptors are in use by the process.
|
|||
The system limit on the total number of open files has been reached.
|
||||
.SH "CONFORMING TO"
|
||||
POSIX.1
|
||||
.SH EXAMPLE
|
||||
The following program creates a pipe, and then
|
||||
.BR fork (2)s
|
||||
to create a child process.
|
||||
After the
|
||||
.BR fork (2),
|
||||
each process closes the descriptors that it doesn't need for the pipe
|
||||
(see
|
||||
.BR pipe (7)).
|
||||
The parent then writes the string contained in the program's
|
||||
command-line argument to the pipe,
|
||||
and the child reads this string a byte at a time from the pipe
|
||||
and echoes it on standard output.
|
||||
.nf
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int pfd[2];
|
||||
pid_t cpid;
|
||||
char buf;
|
||||
|
||||
assert(argc == 2);
|
||||
|
||||
if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); }
|
||||
|
||||
cpid = fork();
|
||||
if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }
|
||||
|
||||
if (cpid == 0) { /* Child reads from pipe */
|
||||
close(pfd[1]); /* Close unused write end */
|
||||
|
||||
while (read(pfd[0], &buf, 1) > 0)
|
||||
write(STDOUT_FILENO, &buf, 1);
|
||||
|
||||
write(STDOUT_FILENO, "\\n", 1);
|
||||
close(pfd[0]);
|
||||
_exit(EXIT_SUCCESS);
|
||||
|
||||
} else { /* Parent writes argv[1] to pipe */
|
||||
close(pfd[0]); /* Close unused read end */
|
||||
write(pfd[1], argv[1], strlen(argv[1]));
|
||||
close(pfd[1]); /* Reader will see EOF */
|
||||
wait(NULL); /* Wait for child */
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
.fi
|
||||
.SH "SEE ALSO"
|
||||
.BR fork (2),
|
||||
.BR read (2),
|
||||
|
|
Loading…
Reference in New Issue