进程通信值pipe管道
来源:互联网 发布:矩阵的秩8个性质及证明 编辑:程序博客网 时间:2024/05/21 09:04
1. 基本概念
管道是一种把两个进程之间的标准输入和标准输出连接起来的机制。管道是一种历史悠久的进程间的通信的方法,自从unix操作系统诞生之初,管道就存在了。进程创建管道,每次创建两个文件描述符来操作管道。其中一个队管道进行写操作,另一个描述符对文件进行读操作。下图显示了管道如何将两个进程通过内核连接起来的状态。
管道是半双工的,只能由一端发一端接收,因此如果要实现全双工通信,必须要设置两个管道。由于进程A和进程B都能够访问管道的两个描述符,因此管道在创建之后要设置在各个进程中的方向,希望数据向哪个方向传输。对管道的读写操作和一般的IO系统函数一致,使用write函数写入数据,但是不支持偏移函数lseek。
2 pipe()函数介绍
创建管道的函数原型为:#include<unistd.h>
Int pipe(int filedes[2]);
数组中的filedes是一个文件描述符的数组,用于保存管道返回的两个文件描述符。数组
中的第一个filedes[0]是为了读操作创建的,filedes[1]是为了写操作创建的。成功返回0,失败返回-1。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>#include<wait.h>//父进程向子进程发送数据int main(){ int fd[2]; int ret=pipe(fd); if(ret==-1) { printf("pipe failed\n"); exit(EXIT_FAILURE); } pid_t pid=fork(); if(pid==-1) { printf("fork failed\n"); exit(EXIT_FAILURE); } if(pid==0) { close(fd[1]);//关闭子进程的写 char buf[1024]; memset(buf,0,sizeof(buf)); read(fd[0],buf,sizeof(buf)); printf("child recevied-----%s\n",buf); } if(pid>0) { close(fd[0]);//关闭父进程的读 char str[]="hello child"; write(fd[1],str,strlen(str)); wait(NULL);//回收子进程 } return 0;}
阅读全文
0 0
- 进程通信值pipe管道
- 进程通信----管道(pipe)
- 进程间通信-管道pipe
- 进程间通信 管道pipe
- 进程间通信--管道(pipe)
- 进程通信-无名管道PIPE
- 进程通信之管道通信pipe
- 进程间通信——管道(Pipe)
- 运用管道(pipe)进行进程间通信
- Windows API 进程间通信,管道(Pipe)
- 管道-pipe函数 进程间通信
- 进程间通信---匿名管道pipe
- Linux进程间通信之管道(pipe)
- Linux环境进程间通信 --- 管道Pipe
- 进程通信 [ fork() 管道( pipe() ) FIFO ]
- Windows API 进程间通信,管道(Pipe)
- 进程间通信之管道pipe
- Linux 进程间管道pipe通信
- 使用自定义端口连接SQL Server 2008的方法
- 【jzoj5237】【GDOI2018模拟8.7】【最长公共子序列 】【动态规划】
- UVA796 Critical Links (tanjar求桥)
- 简单使用百度语音合成、工具类直接使用
- LintCode49
- 进程通信值pipe管道
- CodeForces
- Leetcode Median of Two Sorted Arrays
- Appium官网Introduction
- hdu3507Print Article(斜率)
- JZOJ 5234. 【NOIP2017模拟8.7A组】外星人的路径
- SQL的四种连接-左外连接、右外连接、内连接、全连接、交叉连接
- kickstart笔记
- Eclipse&&idea快捷键功能