您的位置:首页 > 运维架构 > Linux

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: