一、学习的知识点
1 回顾
1.1
三阶段学:
- 系统编程 包括 进程、IPC(进程间通信,如信号、管道、消息队列、共享内存、信号量)
- 网络编程 包括 socket:TCP/IP,
- 线程:多线程、线程池
- OpenCV
1.2
Linux 一切皆文件,通过文件描述符对文件读写。 是操作系统操作文件或设备的指针
虚拟机 桥接模式可以联网 NAT模式有虚拟网卡,只能用于同一个环境之间的通信
2 进程间通信
2.1进程间通信的目的
- 数据传输
- 共享数据
- 通知事件 一般用信号
- 资源共享 多个进程共享同样的资源, 需要内核提供锁和同步机制
- 进程控制
2.2 进程间通信
- 早期UNIX进程间通信、基于System X进程间通信、基于Socket进程间通信、POSIX进程间通信
- UNIX进程间通信方式包括:管道、FIFO、信号
- System V进程间通信方式包括System V消息队列、System V信号灯、System V共享内存
- POSIX进程间通信方式包括posix消息队列、posix信号灯、posix共享内存
2.2.1 消息队列
消息队列是消息的链表
- 每一个消息队列都有一个id,内核可以有两个三个消息队列,消息队列存在内核中
- 内核:一片内存
- 命令 ipcs 查看进程通信
- 消息可以接收指定类型的消息,如10号消息
传送消息的结构体,格式固定 字符数组长度有最大限制
struct msg_buf {
long mtype;
char mtext[1];
};
typedef struct msg_buf MSG_T;
创建或打开消息队列 key_t 是消息队列的KEY值 IPC_EXCL 检测是否存在 存在则打开失败 不存在则创建成功
int msgget(key_t key,int msgflg); 作用 用来创建和访问一个消息队列
发送消息 参数1 消息队列的id 参数2 结构体指针 参数3 大小 参数4 先为0
//msgsnd(msgid, &msg, sizeof(struct msgbuf), 0);
接收消息
msgrcv(msgid, &msg, sizeof(struct msgbuf), 10, 0);
二、上课没有听懂或者没有理解的地方
无
三、当天学习的收获
多学了一种IPC的方法