关闭

有名管道的创建和读取

489人阅读 评论(0) 收藏 举报

和无名管道的区别:

文件描述符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 }                                                                                                     
~       


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22643次
    • 积分:635
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条