Linux系统编程5 进程通信


主要内容:

  1. 管道
  2. 网络通信

一、管道

主要内容:
IPC通信(消息队列 共享内存 信号量)

  1. pipe
  2. popen pclose
  3. FIFO

无名管道:pipe
有名管道:FIFO

1. pipe概念

  1. 管道为半双工。
  2. 管道只能在有亲缘关系的进程间通信。
  3. 管道也是文件,对他的读写可以使用read() write()函数直接操作文件描述符即可。
  4. pipe管道不能用 lseek()函数对管道进行定位操作。
  5. 一旦对管道中数据进行读取,读取的数据将会从管道中移除。
  6. pipe大小固定,向pipe中写入数据,当管道写满时,继续写入将会阻塞。
  7. 当pipe的读端被关闭时,从写端写入数据时,管道将会破裂,进程将会退出。(关闭读端,即关闭用于读的文件描述符)
  8. 当管道pipe无数据时,读操作会阻塞。

pipe函数
在这里插入图片描述
参数filedes[2]为一个数组,用来保存函数返回的两个文件描述符
filedes[0]视为管道的读端。
filedes[1]视为管道的写端。

2. pipe管道使用

2.1 单个进程使用管道

单个进程使用管道如下:
在这里插入图片描述

2.2 父子进程使用管道

父子进程使用管道如下:
在这里插入图片描述

注意:先pipe()再fork()

在这里插入图片描述

2.3 用于标准输入输出

在这里插入图片描述
在这里插入图片描述

3.popen & pclose 函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. FIFO 命名管道

命名管道FIFO和无名管道pipe最大的区别在于有名管道再文件系统中拥有一个名称,无名管道则没有名称。

3.1 FIFO特点

有名管道的特性:

  1. 有名管道可以使两个互不相关的进程进行通信。
  2. 有名管道和pipe一样是一个文件,管道中数据实际是在内核内存上,对于有名管道同样不可以使用 lseek()函数处理。
  3. 有名管道:先进先出
  4. 对有名管道的操作与pipe一样,采用文件 I/O 方式
  5. 默认情况下,当前FIFO中无数据,读操作会阻塞。
  6. 如果FIFO空间已满,写操作会阻塞。
3.2 创建FIFO

mkfifo()函数用来创建一个有名管道。
在这里插入图片描述
pathname — 指定管道路径名文件名
mode — mode需要与umask取反相与

3.3 访问FIFO
  1. 命令行方式
    在这里插入图片描述
  2. 程序方式
    -----有名管道在打开时需要注意,如果当使用只读方式打开时,将会被阻塞;直到其他进程使用只写的方式打开同一管道时才会返回。
    打开操作以 读写只写 的方式,将不会阻塞。
    在这里插入图片描述
3.4 FIFO的应用

应用1:
在这里插入图片描述
在这里插入图片描述
应用2:****
在这里插入图片描述

二、网络通信

主要内容:

  1. Socket的基本概念
  2. 如何实现面向连接的TCP编程
  3. 如何实现非连接的UDP编程
  4. 复杂网络程序的实现
  5. 网络程序的应用

服务器和客户机的信息函数

  1. 字节序列转换
    在这里插入图片描述
    在这里插入图片描述
  2. 地址格式转换
    在这里插入图片描述

1. socket基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Server程序的作用:
在这里插入图片描述
Client程序的作用:
在这里插入图片描述
在这里插入图片描述
UDP编程的适用范围:
在这里插入图片描述

具体编程时的区别:
在这里插入图片描述

2. TCP协议

在这里插入图片描述
头文件:
在这里插入图片描述
socket:
在这里插入图片描述
bind:
在这里插入图片描述
listen:
在这里插入图片描述
accept:
在这里插入图片描述
connect:
在这里插入图片描述
send/recv:
在这里插入图片描述
close & shutdown:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. UDP编程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 网络高级编程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值