网络编程——11. 进程间通信

11.1 进程间通信的基本概念

进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。

对进程间通信的基本理解

只要有两个进程可以同时访问的内存空间,就可以通过此空间交换数据。
但是,进程具有完全独立的内存结构。就连通过fork函数创建的子进程也不会与父进程共享内存空间。此时,进程间通信只能通过其他特殊方法完成。

通过管道实现进程间通信

在这里插入图片描述

为了完成进程间通信,需要创建管道

管道并非属于进程的资源,而是和套接字一样,属于操作系统(也就不是fork函数的复制对象),所以,两个进程通过操作系统提供的内存空间进行通信
在这里插入图片描述
父进程调用该函数时将创建管道,同时获取对应于出入口的文件描述符,此时父进程可以读写同一管道。

但父进程的目的是与子进程进行数据交换,因此需要将入口或出口中的一个文件描述符利用fork函数传递给子进程

#include <stdio.h>
#include <unistd.h>

#define BUF_SIZE 30

int main(int argc, char *argv[]) {
    int fds[2];
    char str[] = "Who are you?";
    char buf[BUF_SIZE];
    pid_t pid;
 
    // 调用pipe函数创建管道,fds数组中保存用于IO的文件描述符
    pipe(fds);
    pid = fork();
    if(pid == 0) {
    	write(fds[1], str, sizeof(str));
    } else {
    	read(fds[0], buf, BUF_SIZE);
    	puts(buf);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/83986503
今日推荐