有名管道的创建和读取

原创 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 }                                                                                                     
~       


有名管道实例

代码来自:嵌入式linux应用开发标准教程 有名管道可以在两个没有亲缘关系的进程间通信,其实就是创建了个文件你写我读而已,加了先进先出机制 但是他是半双工的  一次只能进程A发进程B收      ...
  • liang890319
  • liang890319
  • 2012年12月11日 20:40
  • 2135

Linux下的有名管道(02)---shell操作有名管道

环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 创建有名管道,并在两个控制台窗口中使用管道进行通信。 步骤: 1、创建管道,并查看管道信息: ...
  • sinat_25457161
  • sinat_25457161
  • 2015年09月21日 15:34
  • 1045

java实现二叉树创建和遍历

今天晚上我学习了java语言的二叉树创建和遍历算法。 实现的机制和上一节课差不多。 代码如下: package 二叉树链表; public class Node { private in...
  • jjfly999
  • jjfly999
  • 2016年03月08日 21:34
  • 759

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

#include #include #include #include #include #if 1 //创建两个FIFO实现不同进程间的全双工通信 --实现自由通信 //有名管道的创建及读写exte...
  • liyf__88
  • liyf__88
  • 2017年05月21日 17:31
  • 273

有名管道与无名管道之间的区别

1)无名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。     单独构成一种独立的文件系统:管...
  • qq100440110
  • qq100440110
  • 2016年03月16日 10:18
  • 1535

有名管道读写实例

测试系统:RedHat Linux 9.0 源文件:/* * 管道通信:有名管道 * 无名管道只能用于具有亲缘关系的进程之间,而有名管道可以在互不相关的两个进程间 * 实现彼此通信。要注意,FIFO严...
  • ArduousBonze
  • ArduousBonze
  • 2008年07月06日 13:17
  • 4549

Linux下的有名管道(03)---使用函数创建和删除有名管道

环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 1、创建管道的时候,使用的函数:int mkfifo(const char *pathname, mod...
  • sinat_25457161
  • sinat_25457161
  • 2015年09月21日 15:38
  • 441

Android SQLite数据库创建和使用实战(一)

转载地址:http://blog.csdn.net/yanbober/article/details/20688273 Android SQLiteSQLiteOpenHelper数据库...
  • qq_20816947
  • qq_20816947
  • 2015年08月06日 11:05
  • 302

XML创建和读取

using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste...
  • yfz19890410
  • yfz19890410
  • 2012年01月31日 11:32
  • 841

【C】函数的调用过程,栈帧的创建和销毁

每一次函数调用都是一个过程,这个过程我们称之为:函数的调用过程。 函数调用过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。 栈帧的维护需要我们了解e...
  • qq_37924645
  • qq_37924645
  • 2017年04月23日 16:33
  • 150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有名管道的创建和读取
举报原因:
原因补充:

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