Linux学习笔记——管道PIPE
来源:互联网 发布:曦力音视频转换软件 编辑:程序博客网 时间:2024/06/01 10:06
管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。
# include <unistd.h>
int pipe(int filedes[2]); //创建管道
pipe()说明:
返回值:0成功,-1出错。
如果调用成功,则进程此时由了两个额外的打开文件描述符,filedes[0]中的值是管道的读取端,而filedes[1]是管道的写入端。
#include<unistd.h>
#include<sys/types.h>
#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
int pipe_fd[2];
pid_t pid;
char buf_r[100];
char *p_wbuf;
int r_num;
memset(buf_r,0,sizeof(buf_r));
//创建管道
if(pipe(pipe_fd)<0){
printf("pipe create error/n");
return -1;
}
if((pid=fork())==0){//表示在子进程中
printf("/n");
//关闭管道写描述符,进行管道读操作
close(pipe_fd[1]);
sleep(2);
//管道描述符中读取
if((r_num=read(pipe_fd[0],buf_r,100))>0){
printf("%d numbers read from the pipe is %s/n",r_num,buf_r);
}
close(pipe_fd[0]);
exit(0);
}
else if(pid>0){//表示在父进程中,父进程写
//关闭管道读描述符,进行管道写操作
close(pipe_fd[0]);
if(write(pipe_fd[1],"Hello",5)!=-1)
printf("parent write1 success!/n");
if(write(pipe_fd[1],"Pipe",5)!=1)
printf("parent write2 success!/n");
close(pipe_fd[1]);
sleep(3);
waitpid(pid,NULL,0);
exit(0);
}
}
管道读写注意事项:
1.必须在系统调用fork()中调用pipe(),否则子进程将不会继承文件描述符;
2.当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。
转载声明: 本文转自 http://hi.baidu.com/glowzrf/blog/item/2e3edd17ed23b8044b90a70e.html
======================================================================
扩展参考:
命名管道FIFO——Linux笔记
http://hi.baidu.com/glowzrf/blog/item/dcaf96fb28c941136d22eb9f.html
信号——Linux学习笔记
http://hi.baidu.com/glowzrf/blog/item/2828d6ce8a17d63cb700c8e9.html
守护进程——Linux学习笔记
http://hi.baidu.com/glowzrf/blog/item/35fd44949629781bd31b70d7.html
共享内存——Linux学习笔记
http://hi.baidu.com/glowzrf/blog/item/9a2e97e7e9f1272bb938208d.html
- 管道pipe——Linux学习笔记
- Linux学习笔记——管道PIPE
- linux系统编程——管道pipe
- linux学习笔记——pipe
- 实例——Linux管道pipe的使用
- linux操作系统编程——简单的pipe管道
- Linux进程通信(一)——pipe管道
- Linux进程间通信——管道 pipe 详解
- Swoole源码学习记录(六)——Pipe管道
- linux c学习笔记----管道文件(pipe,popen,mkfifo,pclose,dup2)
- linux--管道pipe
- Linux 管道(pipe)
- Linux pipe(管道)
- linux管道pipe
- linux管道(pipe)
- linux管道pipe详解
- 【linux】匿名管道pipe
- Linux 管道pipe
- Linux上使用数码相机
- 如果我真的好,你为什么不要。
- Proftp安装及配置(完整版)
- 老板不喜欢听的9句话
- LINUX安全命令
- Linux学习笔记——管道PIPE
- Android VOLD 分析
- abap 函数总结
- 取消svn add
- 操作系统学习笔记(11) 互斥和同步的解决方案-消息传递
- 主题:war、jar包的打包方法,命令行方式和使用jbuilder或者eclipse
- 分享一些android题目
- pipe
- [C++] 如何枚举所有打印机