有名管道的创建和读取

原创 2013年12月04日 12:18:42

和无名管道的区别:

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


相关文章推荐

linux16.04 中创建 有名管道 fifo

创建一个有名管道,解决无血缘关系的进程之间的通信; 创建管道的函数 #include #include int mkfifo(const char *pathname, mode_t mode...

C语言有名管道fifo的创建及运用

三个文件(fifo.c,write.c,read.c) fifo.c用来创建有名管道fifo(最先编译) write.c用来向管道写入数据 read.c用来从管道读出数据 ==========...

通信方式-有名管道的创建和读写

#include #include #include #include #include #if 1 //创建两个FIFO实现不同进程间的全双工通信 --实现自由通信 //有名管道的创建及读写exte...

有名管道的创建与读写

创建有名管道有两种方式: 一是在 shell 下交互地建立一个有名管道,二是在程序中使用系统函数建立有名管道。shell 方式下可使用 mknod 或 mkfifo 命令,下面命令使用 mknod ...

Linux初学,利用共享内存,有名管道,select实现两个用户之间的自由对话。

利用共享内存,有名管道,select实现两个用户之间的自由对话。 原理:send1.c  send2.c  recv1.c   recv2.c 12.fifo  21.fifo send1.c(sen...
  • dodoto
  • dodoto
  • 2015年05月25日 15:24
  • 931

【Linux系统编程】进程间通信--有名管道

命名管道的概述 无名管道,由于没有名字,只能用于亲缘关系的进程间通信(更多详情,请看《无名管道》)。为了克服这个缺点,提出了命名管道(FIFO),也叫有名管道、FIFO 文件。 命名管道(...

linux学习之十九---有名管道

有名管道: 管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存储与文...

linux进程通信-有名管道

1.核心理论: 有名管道:有名管道又称FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用open 、read 、write等函数。 fifo文件与普通文件的对比 FIFO文件 ...

有名管道(FIFO)的用法

作者:曾宏安,华清远见嵌入式学院讲师。   有名管道又称为FIFO,是进程间通信的一种方式。FIFO具有以下特点:   1.全双工的通信模式,数据先进先出;   2.可以用于任意的进程之间,通过...

进程间通信-有名管道

无名管道,由于没有名字,只能用于亲缘关系的进程间通信.。为了克服这个缺点,提出了有名管道(FIFO)。 FIFO不同于无名管道之处在于它提供了一个路径名与之关联,以FIFO的文件形式存在于文件系统中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有名管道的创建和读取
举报原因:
原因补充:

(最多只允许输入30个字)