文章目录
主要内容:
- 管道
- 网络通信
一、管道
主要内容:
IPC通信(消息队列 共享内存 信号量)
- pipe
- popen pclose
- FIFO
无名管道:pipe
有名管道:FIFO
1. pipe概念
- 管道为半双工。
- 管道只能在有亲缘关系的进程间通信。
- 管道也是文件,对他的读写可以使用read() write()函数直接操作文件描述符即可。
- pipe管道不能用 lseek()函数对管道进行定位操作。
- 一旦对管道中数据进行读取,读取的数据将会从管道中移除。
- pipe大小固定,向pipe中写入数据,当管道写满时,继续写入将会阻塞。
- 当pipe的读端被关闭时,从写端写入数据时,管道将会破裂,进程将会退出。(关闭读端,即关闭用于读的文件描述符)
- 当管道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特点
有名管道的特性:
- 有名管道可以使两个互不相关的进程进行通信。
- 有名管道和pipe一样是一个文件,管道中数据实际是在内核内存上,对于有名管道同样不可以使用 lseek()函数处理。
- 有名管道:先进先出
- 对有名管道的操作与pipe一样,采用文件 I/O 方式
- 默认情况下,当前FIFO中无数据,读操作会阻塞。
- 如果FIFO空间已满,写操作会阻塞。
3.2 创建FIFO
mkfifo()函数用来创建一个有名管道。
pathname — 指定管道路径名文件名
mode — mode需要与umask取反相与
3.3 访问FIFO
- 命令行方式
- 程序方式
-----有名管道在打开时需要注意,如果当使用只读方式打开时,将会被阻塞;直到其他进程使用只写的方式打开同一管道时才会返回。
打开操作以 读写 或 只写 的方式,将不会阻塞。
3.4 FIFO的应用
应用1:
应用2:****
二、网络通信
主要内容:
- Socket的基本概念
- 如何实现面向连接的TCP编程
- 如何实现非连接的UDP编程
- 复杂网络程序的实现
- 网络程序的应用
服务器和客户机的信息函数
- 字节序列转换
- 地址格式转换
1. socket基础
Server程序的作用:
Client程序的作用:
UDP编程的适用范围:
具体编程时的区别:
2. TCP协议
头文件:
socket:
bind:
listen:
accept:
connect:
send/recv:
close & shutdown:
3. UDP编程
4. 网络高级编程