进程通信之管道
来源:互联网 发布:ubuntu 系统剪贴板 编辑:程序博客网 时间:2024/06/04 18:40
管道通信分为两种,一种是匿名管道,另一种是命名管道,对于这两种管道有什么区别呢?
匿名管道,顾名思义就是没有名字,他只能让拥有血缘关系的两个进程进行通信,它是让两个进程分别连接管道的读端和写端,将数据保存在该管道内,两个进程就都能看到这些信息了。
因为匿名管道不能让两个没有血缘关系的进程通信,那么这些进程想要通信要怎么办呢?所以命名管道就出现了。
命名管道可以让两个毫无关系的进程进行通信,它是在硬盘上创建了一个管道文件,它在创建时需要定义路径,所以其他进程也可以连接到该管道,就实现了两个没有关系的进程间通信。
那么匿名管道如何让编写呢?
子进程向父进程发送一个hello world的消息:
1 #include <sys/types.h> 2 #include <sys/wait.h> 3 #include <unistd.h> 4 #include <stdio.h> 5 #include <string.h> 6 int main() 7 { 8 ssize_t n; 9 int i=0; 10 int fd[2]={0, 0 }; 11 char buf[1024]; 12 //判断创建的管道是否成功 13 if(pipe(fd)<0) 14 { 15 perror("pipe"); 16 return 1; 17 } 18 pid_t pid = fork(); 19 if(pid < 0) 20 { 21 perror("fork"); 22 return 2; 23 } 24 if(pid == 0) 25 { 26 close(fd[0]);//--->write 27 const char* arr = "hello linux!\n"; 28 while(i<10) 29 { 30 write(fd[1], arr, strlen(arr)); 31 sleep(1); 32 i++; 33 } 34 } 35 else 36 { 37 close(fd[1]);//---->read 38 i=0; 39 while(i<10) 40 { 41 n = read(fd[0], buf, sizeof(buf)-1); 42 if(n > 0) 43 { 44 buf[n-1] = 0; 45 printf("client->father#%s\n", buf); 46 } 47 i++; 48 } 49 } 50 return 0; 51 }
子进程先向管道内写入信息,父进程在从管道内读取信息。
匿名管道的通信方式:
阅读全文
0 0
- 进程通信之管道
- 进程通信之管道
- 进程通信之管道
- 进程通信之管道
- 进程通信之管道
- 进程通信之管道通信
- 进程通信之管道通信
- 进程通信之管道通信
- 【进程通信】之管道通信
- [进程通信] 进程间通信 之 管道
- 进程通信之管道(续)
- linux进程通信之管道
- 进程间通信之管道
- 进程间通信之 管道
- 进程间通信 之 管道
- 进程间通信之管道
- 进程通信之无名管道
- Linux 进程通信之管道
- elasticsearch基础知识
- 继承
- 炒现饭之友盟推送的简单实现
- Maven Tomcat7 插件部署Java Web应用
- CAD .NET v12发布,提高GDI+可视化速度并可导入AutoCAD®DWG 2018
- 进程通信之管道
- html5新增api(持续更新)
- T4系列文章之3:T4语法的介绍
- Hadoop--创建Hadoop集群
- SE01 Unit03 日期操作 、 集合框架
- nginx和Apache该怎么选
- RocketMQ实战(四)
- Linux jogl配置
- 【考研经验随笔1】