linux进程通信

一:进程通信概述

  1. 什么是进程间通信?
    什么是线程间通信?

    进程通信:在用户空间实现进程通信是不可能的,通过Linux内核通信

    线程间通信:可以在用户空间就可以实现,可以通过全局变量通信。

  2. 有哪几种通信方式?

管道通信:无名管道、有名管道(文件系统中有名)
信号通信:信号(通知)通信包括:信号的发送、信号的接收和信号的处理。

IPC(Inter-Process Communication)通信:共享内存、消息队列和信号灯。

以上是单机模式下的进程通信(只有一个Linux内核)

Socket通信:存在于一个网络中两个进程之间的通信(两个Linux内核)。

  1. 进程通信课程的学习思路:每一种通信方式都是基于文件IO的思想。
    open:功能:创建或打开进程通信对象。函数形式不一样,有的是有多个函数完成。
    write: 功能:向进程通信对象中写入内容。函数形式可能不一样。
    read: 功能:从进程通信对象中读取内容。函数形式可能不一样。
    close: 功能:关闭或删除进程通信对象。形式可能不一样。

二:无名管道(匿名管道)
通信原理:
在这里插入图片描述
无名管道是不能在文件系统中以任何方式看到的半双工管道。半双工管道意味着管道的 一端只读或只写,管道文件是一个特殊的文件,是由队列来实现的。
在这里插入图片描述
在文件IO中创建一个文件或打开一个文件是由open函数来实现的,它不能创建管道文件。只能用pipe函数来创建管道。

函数形式:int pipe(int fd[2])
功能:创建管道,为系统调用:unistd.h
参数:就是得到的文件描述符。可见有两个文件描述符:fd[0]和fd[1],管道有一个读端fd[0]用来读和一个写端fd[1]用来写,这个规定不能变。
返回值:成功是0,出错是-1;
例子pipe()
在这里插入图片描述
在这里插入图片描述
对无名管道中的读写进行判断
在这里插入图片描述
在这里插入图片描述
由此可见对无名管道中的读写
在这里插入图片描述
注意:
1、管道中的东西,读完了就删除了;队列
2、如果管道中没有东西可读,再读的话,则会读阻塞。

验证读阻塞(读完后再次读)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述通过查看,看到a.out进程

验证写阻塞(写满了以后再写),
在这里插入图片描述
在这里插入图片描述
没有输出,说明写满了
验证写阻塞:可以计算出内核开辟的管道有多大。
缓存< 5457

通过管道,链接父子进程中的对象
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值