FIFO管道

1.mkfifo -m 777 fifo1 :  创建一个有名管道,权限是777

2.可以实现无关进程间的通信,克服了匿名管道的缺陷

3.,管道文件最前面是 p

4.管道文件传输信息类似于文件,但又区别于普通文件,管道文件在数据读出后,管道中就会同时清除数据

5.函数创建管道:

  1. #include<stdio.h>
  2. #include<sys/stat.h>
  3. #include<sys/types.h>
  4. #include<stdlib.h>
  5. int main(int argc,char* args[])
  6. {
  7. if(argc<2)
  8. {
  9. printf("please input fifo name!\n");
  10. exit(-1);
  11. }
  12. mode_t mode = 0666;
  13. if(mkfifo(args[1],mode)==-1)
  14. {
  15. perror("create fifo file");
  16. exit(-1);
  17. }
  18. puts("create fifo success!");
  19. return 0;
  20. }

注意创建的FIFO文件的权限不是mode,必须用umask修正

umask的值可以通过命令查看,也可以自己设定

来自为知笔记(Wiz)

时间: 2024-10-16 16:27:32

FIFO管道的相关文章

bash fifo管道使用测试例子

碰到一个场景: 一个脚本内起了多个后台线程,往一个日志文件写日志,结果因为线程之间争抢写锁,导致脚本执行效率很低,为了解决这个问题,希望减少写锁的争抢,尝试使用fifo解决该问题,以下是实验用例子. #!/bin/bashfifo_file=fifo.pipe mkfifo $fifo_file exec 6<>$fifo_file rm $fifo_file # 随便一个写了一个生成数据的函数 DateWrite () { i=0 while [ $i -lt 1000 ] do str=`

FIFO管道探索历程

刚开始代码的实现如下: void CreateFIFO(){    if((mkfifo(FIFOPATH,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST))    {        printf(strerror(errno));    }   } int OpenFIFO(){    fd=open(FIFOPATH,O_RDWR|O_NONBLOCK);    return fd;} 觉得非常的不优雅,毕竟需要调用两个函数,而且写函数又有一个

管道和FIFO

管道和FIFO 管道(pipe) 管道在Unix及Linux进程间通信是最基础的,很容易理解.管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动.管道是典型的单向通信,即计算机网络中所说的“半双工”.管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在父子进程之间通信.通常是父进程创建一个管道,然后fork一个子进程,此后父子进程共享这个管道进行通信. 管道由pipe函数创建,函数原型如下: #include<unistd.h> int pip

进程之间通信之有名管道、无名管道(pipe),笔记

             进程之间的通信作用1.数据传输   :一个进程需要将他的数据传到其他进程2.资源共享3.进程通知事件4.进程控制 :有些进程完全控制另一个进程的执行,如调试状态啊我们需要完全控制他的每一步操作: 通信发展历史Linux进程间的通信IPC由以下几个部分发展而来:1.UNIX进程之间的通信2.基于system v进程间的通信3.POSIX进程之间的通信(portable operating system interface) 现在Linux使用的进程间的通信方式包括:1.管

unix 网络编程卷2 第43页 管道:open竟然会阻塞?

创建fifo管道的时候,open会阻塞?还是我的代码有问题? #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> #Include <sys/stat.h> #define FIFO1 "/tmp/fifo.1" #define FIFO2 "/tmp/fif

14.有名管道通信

有名管道: 有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用 open,read,write等. 有名管道的学习: ? 有名管道与其他文件的对比: FIFO文件在使用上和普通文件有相似之处,但是也有不同之处: 1. 读取Fifo文件的进程只能以"RDONLY"方式打开fifo文件. 2. 写Fifo文件的进程只能以"WRONLY"方式打开fifo文件. 3. Fifo文件里面的内容被读取后,就消失了.但是普通文件里面的内容读取后还存

linux 进程间通信 之fifo

上一篇博客已经介绍了一种进程间通信的方式,但是那只是针对于有血缘关系的进程,即父子进程间的通信,那对于没有血缘关系的进程,那要怎么通信呢?  这就要创建一个有名管道,来解决无血缘关系的进程通信, fifo: [email protected]:~$ mkfifo xwp [email protected]:~$ ls -l myfifo prw-rw-r-- 1 book book 0 Feb 6 2016 myfifo mkfifo 既有命令也有函数 #include <sys/types.h

Linux进程间通信-命名管道

前面我们讲了进程间通信的一种方式,匿名管道.我们知道,匿名管道只能用于父子关系的进程之间.那么没有这种关系的进程之间该如何进行数据传递呢? 1.什么是命名管道 匿名管道是在缓存中开辟的输出和输入文件流的空间,只能用于父子关系的进程之间.因为父子进程的输入和输出文件描述符是一致的.命名管道是一种实际存在的FIFO文件,称作“管道文件”,用于不同进程之间,命名管道进程间打开同一个FIFO文件,进行数据传递.我们可以像普通文件一样操作FIFO文件.不同进程,引用同一个FIFO文件,进行数据传递. 2.

进程通信之管道通信

编写两个程序,一个程序是对管道的写数据.另一个是对管道的读数据. 有名管道的创建mkfifo 读数据:fifo_read.c /* fifo_read.c */ #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <lim