您现在的位置是:首页 > 技术文章网站首页技术文章
[C/C++]管道通信
了解C/C++管道通信;
含义
(1) 管道:管道一般用于两个不同进程之间的通信。当一个进程创建一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样 提供了两个进程之间数据流动的一种方式。
(2) FIFO:FIFO是一种先进先出的队列。它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO。因此也成为命名管。
实现方法
调用pipe()函数创建管道
int pipe(int fd[2]);
fd[0]为管道里的读取端
fd[1]则为管道的写入端。
通过write()函数写入信息
int write (int handle,char *buf,unsigned len)
进程通过read()函数读取信息
int read (int handle,void *buf,unsigned len)
特点
1.管道是一个单向通信信道,如果进程间要进行双向通信,通常需要定义两个管道。
2.管道通过系统调用read(), write()函数进行读写操作。
分类
1.匿名管道:只适用于父子进程之间通信;管道能够把信息从一个进程的地址空间拷贝到另一个进程的地址空间。
2.命名管道:命名管道有自己的名字和访问权限的限制,就像一个文件一样。它可以用于不相关进程间的通信,进程通过使用管道的名字获得管道。
实例
/*PIPE*/ #include <stdlib.h> #include <unistd.h> #define MAXLINE 80 int main() { int n; int fd[2]; pid_t pid; char line[MAXLINE]; if(pipe(fd) < 0) { perror("pipe"); exit(1); } if((pid = fork()) < 0) { perror("fork"); exit(1); } if(pid > 0) { close(fd[0]); write(fd[1],"Hello World\n",12); wait(NULL); }else{ close(fd[1]); n = read(fd[0],line,MAXLINE); write(STDOUT_FILENO,line,n); } return 0; }
上一篇:多进程与多线程的区别
下一篇:[ThinkPHP]URL简化
相关文章
- [MFC]根据图形绘制界面
- [MFC]带图标按钮
- [Qt+Vs]OpenCV安装配置
- [C++]数据封装
- [C++]多态
- [C++]实现链表反转逆序
- [Qt]StackWidget一个按钮切一个页面
- [Qt]FindChild之找孩子
- [C++]Windows UDP 通信
- [C/C++]经典算法 二(面试题)
- [C/C++]数组、指针 & 引用
- [C++]内存管理机制
- [C/C++]经典算法 一(面试题)
- [C/C++]管道通信
- [直播源]电视频道源
- [Qt]根据图片绘制窗体
- [Qt+Vs]打包发布单独EXE
- [Qt+Vs]实现躲避鼠标按钮
- [Ubuntu] 安装Qt5.15无法启动解决方法
文章评论 (0)