Linux命名管道
2014-08-26 21:01
232 查看
命名管道实现了没有亲缘关系的进程的通信,创建命名管道时候,系统创建了一个FIFO的文件,通过对文件的操作,实现走了没有亲缘关系的管道也可以数据交换,相比普通管道
命名管道多了管道的打开和删除,因为是文件吗,当然剧本文件的属性了。
1.可以通过该shell命令创建命名管道,mknod 和mkfifo,比如通过命令创建命名管道p1;
2.系统提供了
在非阻塞模式下,对管道的只读打开立即返回,而如果实现没有进程以只读方式打开管道,则对管道的写方式打开返回失败,ENXIO.
阻塞模式:当打开一个管道读时,如果没有打开管道用于写的进程,则该打开操作将被阻塞,直道有一个进程用写的方式打开该管道为止。反之亦然。
案例
1.先以只读方式打开管道文件
2.以只写方式打开同一个管道文件
命名管道多了管道的打开和删除,因为是文件吗,当然剧本文件的属性了。
1.可以通过该shell命令创建命名管道,mknod 和mkfifo,比如通过命令创建命名管道p1;
mkfifo -m 0644 p1或者mknod p1 p;
2.系统提供了
int mkfifo (__const char *__path, __mode_t __mode);管道的读写和文件无异,可以用open打开,两种方式打开阻塞(默认),非阻塞(open的标志设置为 O_NONBLOCK).
在非阻塞模式下,对管道的只读打开立即返回,而如果实现没有进程以只读方式打开管道,则对管道的写方式打开返回失败,ENXIO.
阻塞模式:当打开一个管道读时,如果没有打开管道用于写的进程,则该打开操作将被阻塞,直道有一个进程用写的方式打开该管道为止。反之亦然。
案例
1.先以只读方式打开管道文件
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<wait.h> #include<errno.h> #include<signal.h> #include <setjmp.h> #include<string.h> #include<sys/types.h> #include<fcntl.h> #include<sys/stat.h> /****以只读方式打开创建的管道p1,检测阻塞方式打开管道的过程*/ // 会因为没有一个以写方式打开管道,卡住 int main() { int fd; if((fd = open("/home/yy/p",O_RDONLY,0)) < 0) { perror("open"); exit(-1); } printf("open fifo p1 for read success!\n"); close(fd); return 0; }
2.以只写方式打开同一个管道文件
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<wait.h> #include<errno.h> #include<signal.h> #include <setjmp.h> #include<string.h> #include<sys/types.h> #include<fcntl.h> #include<sys/stat.h> /****以只读方式打开创建的管道p1,检测阻塞方式打开管道的过程*/ // 在第一个例子没有的输出窗口没有退出的情况下,重新打开一个shell窗口允许这个,两个窗口都输出语句 int main() { int fd; if((fd = open("/home/yy/p",O_WRONLY,0)) < 0) { perror("open"); exit(-1); } printf("open fifo p1 for read success!\n"); close(fd); return 0; }
相关文章推荐
- linux下进程间通信系列(管道和命名管道)
- linux学习笔记-读《Linux编程技术详解》(10)-管道与命名管道
- linux 命名管道fifo实现进程间小数据通信
- linux 命名管道
- Linux进程间通信的几种方法-半双工管道,命名管道,消息队列
- Linux环境进程间通信(一)——管道(pipe)和命名管道(fifo)
- Linux下进程间通信:命名管道-mkfifo
- Linux中的pipe与named pipe(FIFO),即管道和命名管道
- linux进程间通信之 管道,命名管道,协同进程区别
- linux的管道和命名管道
- Linux下进程间通信机制:FIFO(命名管道)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- 用QSocket来操作Linux命名管道
- Linux下进程间通信:命名管道-mkfifo
- Linux环境进程间通信(一)——管道(pipe)和命名管道(fifo)
- Linux命名管道FIFO的读写规则
- 嵌入式linux的学习笔记-标准文件流管道与命名管道(三)
- Linux进程通信 命名管道
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)