create.c
1 #include<head.h>
2
3 int main(int argc, const char *argv[])
4 {
5 //创建有名管道文件
6 if(mkfifo("./myfifo", 0664) != 0)
7 {
8 perror("mkfifo error");
9 return -1;
10 }
11 printf("myfifo create success\n");
12 if(mkfifo("./myfifo1", 0664) != 0)
13 {
14 perror("mkfifo1 error");
15 return -1;
16 }
17 printf("myfifo create success\n");
18 printf("myfifo1 create success\n");
19
20 //使用getchar阻塞一下
21 getchar();
22
23 system("rm myfifo");
24 system("rm myfifo1");
25
26
27
28 return 0;
29 }
~
~
snd.c
1 #include<head.h>
2
3 int main(int argc, const char *argv[])
4 {
5
6
7
8 pid_t pid = -1; //定义变量存储进程号
9
10 pid = fork(); //创建一个子进程
11
12 //后续的程序,父子进程都会执行
13 if(pid > 0)
14 {//以只写的形式打开管道文件
15 int wfd = -1;
16 if((wfd = open("./myfifo", O_WRONLY)) == -1)
17 {
18 perror("open error");
19 return -1;
20 }
21
22 printf("写端打开成功\n");
23
24 //向管道文件中循环写入数据
25 char wbuf[128] = "";
26 while(1)
27 {
28 bzero(wbuf, sizeof(wbuf)); //清空内容
29
30 //从终端输入数据
31 printf("请输入>>>>>");
32 fflush(stdout); //刷新行缓冲区
33 read(0, wbuf, sizeof(wbuf));
34 wbuf[strlen(wbuf)-1] = 0; //将回车换成'\0'
35
36 //将数据写入管道中
37 write(wfd, wbuf, sizeof(wbuf));
38
39 //判断
40 if(strcmp(wbuf, "quit") == 0)
41 {
42 break;
43 }
44 }
45
46 //关闭文件
47 close(wfd);
48
49
50
51 }else if(pid == 0)
52 {//以只写读的形式打开管道文件
53 int rfd = -1;
54 if((rfd = open("./myfifo1", O_RDONLY)) == -1)
55 {
56 perror("open error");
57 return -1;
58 }
59
60 printf("读端打开成功\n");
61
62 //从管道文件中循环读取数据
63 char rbuf[128] = "";
64 while(1)
65 {
66 bzero(rbuf, sizeof(rbuf)); //清空内容
67
68 //从管道中读取数据
69 read(rfd, rbuf, sizeof(rbuf));
70
71 printf("收到消息:%s\n", rbuf);
72
73
74 //判断
75 if(strcmp(rbuf, "quit") == 0)
76 {
77 break;
78 }
79 }
80
81 //关闭文件
82 close(rfd);
83
84
85 }else
86 {
87 perror("fork error");
88 return -1;
89 }
90 return 0;
91 }
~
~
recv.c
1 #include<head.h>
2
3 int main(int argc, const char *argv[])
4 {
5
6
7
8 pid_t pid = -1; //定义变量存储进程号
9
10 pid = fork(); //创建一个子进程
11
12 //后续的程序,父子进程都会执行
13 if(pid > 0)
14 { //以只写读的形式打开管道文件
15 int rfd = -1;
16 if((rfd = open("./myfifo", O_RDONLY)) == -1)
17 {
18 perror("open error");
19 return -1;
20 }
21
22 printf("读端打开成功\n");
23
24 //从管道文件中循环读取数据
25 char rbuf[128] = "";
26 while(1)
27 {
28 bzero(rbuf, sizeof(rbuf)); //清空内容
29
30 //从管道中读取数据
31 read(rfd, rbuf, sizeof(rbuf));
32
33 printf("收到消息:%s\n", rbuf);
34
35
36 //判断
37 if(strcmp(rbuf, "quit") == 0)
38 {
39 break;
40 }
41 }
42
43 //关闭文件
44 close(rfd);
45
46
47 }else if(pid == 0)
48 {//以只写的形式打开管道文件
49 int wfd = -1;
50 if((wfd = open("./myfifo1", O_WRONLY)) == -1)
51 {
52 perror("open error");
53 return -1;
54 }
55
56 printf("写端打开成功\n");
57
58 //向管道文件中循环写入数据
59 char wbuf[128] = "";
60 while(1)
61 {
62 bzero(wbuf, sizeof(wbuf)); //清空内容
63
64 //从终端输入数据
65 printf("请输入>>>>>");
66 fflush(stdout); //刷新行缓冲区
67 read(0, wbuf, sizeof(wbuf));
68 wbuf[strlen(wbuf)-1] = 0; //将回车换成'\0'
69
70 //将数据写入管道中
71 write(wfd, wbuf, sizeof(wbuf));
72
73 //判断
74 if(strcmp(wbuf, "quit") == 0)
75 {
76 break;
77 }
78 }
79
80 //关闭文件
81 close(wfd);
82
83
84 }else
85 {
86 perror("fork error");
87 return -1;
88 }
89 return 0;
90 }