什么是进程间通信

进程间通信(ipc,inter-process communication)是指运行在同一台计算机上的多个进程之间进行数据交换和通信的技术。由于每个进程都有自己的地址空间,它们无法直接访问彼此的数据,因此需要通过特定的机制来实现通信。ipc是操作系统和多进程编程中的一个重要概念,广泛应用于分布式系统,多任务操作系统以及各种应用程序之间。

为什么要进程间通信?

1.数据传输:一个进程需要将它的数据发送给另一个进程

2.资源共享:多个进程之间共享同样的资源。

3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)

4.进程控制;有些进程希望元全控制另一个进程的执行(mdebua进程),此时控制进程完整就另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

怎么通信

进程间通信通信本质:是让不同的进程,先看同一份资源【“内存”】

2.具体通信方式的(原理+代码)

1.基于文件的,管道通信

2.System V -本机通信

匿名管道

• 管道是Unix中最古⽼的进程间通信的形式。

• 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个“管道”

1.背景:基于已有技术(文件),直接进行通信

管道操作:

#include

功能:创建⼀⽆名管道原型

int pipe(int fd[2]);

参数fd:⽂件描述符数组,其中fd[0]表⽰读端, fd[1]表⽰写端返回值:成功返回0,失败返回错误代码

例子:

例⼦:从键盘读取数据,写⼊管道,读取管道,写到屏幕
#include #include 
#include 
#include 
int main( void ){
      int fds[2];
char buf[100];
int len;
if (pipe(fds) == -1)
perror("make pipe"), exit(1);
// read from stdin
while (fgets(buf, 100, stdin)) {
    len = strlen(buf);
    // write into pipe
    if (write(fds[1], buf, len) != len) {
        perror("write to pipe");
        break;
    } m
        emset(buf, 0x00, sizeof(buf));
    // read from pipe
    if ((len = read(fds[0], buf, 100)) == -1) {
        perror("read from pipe");
        break;
    } /
        / write to stdout
        if (write(1, buf, len) != len) {
            perror("write to stdout");
            break;
        }
}
}

五大管道特性:

1.用于拥有血缘关系的进程,多用于父子进程

2.管道是普通文件,自带同步机制

3.管道是面向字节流的

4.管道是单向通信的

5.管道文件的生命周期是随进程的

四种通信情况:

写快读慢:写的进程阻塞,等待读完

写慢读快:读的进程阻塞

写关读开:read会读到返回值0,表示文件结尾

写开读关:写入无意义(OS不会做无意义的事),OS会kill -9写端进程,并发 出异常信号(13 SIGPIPE)

今天的更新就到这里,如有错误,欢迎指出!!