我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。
管道分为三种:
- 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。
- 流管道:去除了第一种限制,为半双工,可以双向传递,
- 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。
1、普通管道
int pipe(int fds[2]);//返回值0表示成功,-1表示失败
fd[0]:读 fd[1]:写
子进程往管道中写数据,写数据时要关闭读端
父进程往管道中读数据,写数据时要关闭写端
利用管道实现简单的操作,在管道中写入数据再读出:
#include <stdio.h>
2 #include <unistd.h>
3 #include <string.h>
4 #include <stdlib.h>
5
6 int main(void)
7 {
8 int fds[2];
9 if(pipe(fds)==-1)
10 perror("pipe"),exit(1);
11 pid_t pid=fork();
12 if(pid==-