和无名管道的区别:
文件描述符0代表标准输入文件,一般是键盘;文件描述符1代表标准输出文件,一般是指显示器;文件描述符2代表标准错误输出,一般是指显示器;
无名管道必须是线程之间有亲原关系,但是有名管道是则解决了这个问题,它是通过路经将其写段和读段联系起来的。
//读段
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5 #include<fcntl.h>
6
7 #define FIFO_NAME "myfifo"
8 #define BUF_SIZE 1024
9 int main(void)
10 {
11 int fd;
12 char buf[BUF_SIZE];
13 umask(0);
14 //打开管道的时候会阻塞,知道有写方代开管道。
15 fd = open(FIFO_NAME,O_RDONLY);
16 read(fd,buf,BUF_SIZE);
17 close(fd);
18 exit(0);
19 }
//写段
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<stdlib.h>
4 #include<fcntl.h>
5 #include<string.h>
6
7 #define FIFO_NAME "myfifo"
8 #define BUF_SIZE 1024
9 int main(void)
10 {
11 int fd;
12 char buf[BUF_SIZE]="hello write,i come from process named process!";
13 int flag=0;
14 //umask(0);和0666也就是~0&0666之后就是对文件的操作权限。
15 umask(0);
16 //mkfifo()相当于是用来创建管道的。
17 if(mkfifo(FIFO_NAME,S_IFIFO | 0666) == -1)
18 {
19 perror("mkfifo error!");
20 exit(1);
21 }
22 //打开管道的时候是会阻塞的直到有读放打开管道(阻塞的时候,是不会继续执行下面的代码的。)
23 if(fd = open(FIFO_NAME,O_WRONLY) == -1)
24 {
25 perror("fopen error!");
26 exit(1);
27 }
28 write(fd,buf,strlen(buf)+1);
29 close(fd);
30 exit(0);
31 }
~