LinuxC/C++编程基础(3) 基于管道的进程间通信机制
2012-11-20 18:27
573 查看
一.pipe函数的创建及调用,如下:
#include <unistd.h>
int pipe(int fd[2]);
管道是一种最基本的IPC机制,调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过fd参数传出给用户程序两个文件描述符,fd[0]指向管道的读端,fd[1]指向管道的写端.所以管道在用户程序看起来就像一个打开的文件,通过read(fd[0]);或者write(fd[1]);向这个文件读写数据其实是在读写内核缓冲区。pipe函数调用成功返回0,调用失败返回-1。
二.main.cpp的实现,如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 99
int main(int argc,char** argv){
int n = 0;
int fd[2];
pid_t pid;
char line[MAXLINE];
if(pipe(fd) < 0){
perror("pipe");
exit(1);
}
if((pid = fork()) < 0){//pid<0说明fork系统调用失败
perror("fork");
exit(1);
}
if(pid > 0){//pid>0说明此进程是父进程,用pid保存子进程的进程pid号
close(fd[0]);
write(fd[1],"hello world\n",12);
wait();
}else{//pid=0说明此进程是子进程,父进程的pid号为0
close(fd[1]);
n = read(fd[0],line,MAXLINE);
write(STDOUT_FILENO,line,n);
}
return 0;
}
参考文献:宋劲彬,linux c编程一站式学习
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8204939
#include <unistd.h>
int pipe(int fd[2]);
管道是一种最基本的IPC机制,调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过fd参数传出给用户程序两个文件描述符,fd[0]指向管道的读端,fd[1]指向管道的写端.所以管道在用户程序看起来就像一个打开的文件,通过read(fd[0]);或者write(fd[1]);向这个文件读写数据其实是在读写内核缓冲区。pipe函数调用成功返回0,调用失败返回-1。
二.main.cpp的实现,如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 99
int main(int argc,char** argv){
int n = 0;
int fd[2];
pid_t pid;
char line[MAXLINE];
if(pipe(fd) < 0){
perror("pipe");
exit(1);
}
if((pid = fork()) < 0){//pid<0说明fork系统调用失败
perror("fork");
exit(1);
}
if(pid > 0){//pid>0说明此进程是父进程,用pid保存子进程的进程pid号
close(fd[0]);
write(fd[1],"hello world\n",12);
wait();
}else{//pid=0说明此进程是子进程,父进程的pid号为0
close(fd[1]);
n = read(fd[0],line,MAXLINE);
write(STDOUT_FILENO,line,n);
}
return 0;
}
参考文献:宋劲彬,linux c编程一站式学习
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8204939
相关文章推荐
- Linux下基于C/C++的Socket编程基础
- Linux下基于C/C++的Socket编程基础
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(4) 基于泛型实现vector
- LinuxC/C++编程基础(2) 基于boost::any构建数据容器
- Linux下基于C/C++的Socket编程基础
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例
- 基于Linux下C/C++的网络编程之进程(管道和FIFO)
- LinuxC/C++编程基础(11) 基于深度优先搜索查找迷宫路线
- Linux编程Shell基础管道符
- LinuxC/C++编程基础(20) 使用boost::asio搭建服务器简单实例
- linux c/c++ 编程之-----创建管道文件,并实现两个进程间的信息传递。
- LinuxC/C++编程基础(33) 视频包缓存的实现(续1)
- C++网络编程基础代码(客户端)--基于TCP协议
- linux网络编程之TCP/IP基础(五):分析一帧基于UDP的TFTP协议帧
- Linux下使用Vim进行C/C++ 编程基础知识详解
- LinuxC/C++编程基础(26) “心跳”信息的处理
- Linux下使用Vim进行C/C++ 编程基础知识详解
- LinuxC/C++编程基础(1) 函数指针实现复数的加减乘除