|
|
1.1 root 1: /*
2: * Copyright (c) 1986 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: char copyright[] =
20: "@(#) Copyright (c) 1986 The Regents of the University of California.\n\
21: All rights reserved.\n";
22: #endif /* not lint */
23:
24: #ifndef lint
25: static char sccsid[] = "@(#)pipe.c 6.3 (Berkeley) 3/7/89";
26: #endif /* not lint */
27:
28: #include <stdio.h>
29:
30: #define DATA "Bright star, would I were steadfast as thou art . . ."
31:
32: /*
33: * This program creates a pipe, then forks. The child communicates to the
34: * parent over the pipe. Notice that a pipe is a one-way communications
35: * device. I can write to the output socket (sockets[1], the second socket
36: * of the array returned by pipe()) and read from the input socket
37: * (sockets[0]), but not vice versa.
38: */
39:
40: main()
41: {
42: int sockets[2], child;
43:
44: /* Create a pipe */
45: if (pipe(sockets) < 0) {
46: perror("opening stream socket pair");
47: exit(10);
48: }
49:
50: if ((child = fork()) == -1)
51: perror("fork");
52: else if (child) {
53: char buf[1024];
54:
55: /* This is still the parent. It reads the child's message. */
56: close(sockets[1]);
57: if (read(sockets[0], buf, 1024) < 0)
58: perror("reading message");
59: printf("-->%s\en", buf);
60: close(sockets[0]);
61: } else {
62: /* This is the child. It writes a message to its parent. */
63: close(sockets[0]);
64: if (write(sockets[1], DATA, sizeof(DATA)) < 0)
65: perror("writing message");
66: close(sockets[1]);
67: }
68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.