朔州网站建设价格低,广州品牌网站制作公司,seo网站架构设计,四川建设网入川备案网站1内核提供的原始通信方式有三种
1#xff09;无名管道
2#xff09;有名管道
3#xff09;信号
2System V提供了三种通信方式
4#xff09;消息队列
5#xff09;共享内存
6#xff09;信号量#xff08;信号灯集#xff09;
3套接字通信
7)socke…
1内核提供的原始通信方式有三种
1无名管道
2有名管道
3信号
2System V提供了三种通信方式
4消息队列
5共享内存
6信号量信号灯集
3套接字通信
7)socket 1无名管道
1 无名管道就是没有名字的管道是一个特殊的文件并且存储在内存上不在文件系统中展示
2 无名管道打开后会返回两个文件描述符分别是读端和写端当一个无名管道文件的两端全部被关闭后管道文件在内存上消失
3 由于无名管道在文件系统中没有真实的名字存在所以不能使用open函数来打开需要使用特殊的api进行打开
4 无名管道只能适用于亲缘进程间的通信需要在fork之前将管道文件打开创建子进程后子进程继承一份管道的文件描述符才能使用该管道
5 无名管道的api
int pipe(int pipefd[2]);
2有名管道
1 有名管道有名字的管道文件会在文件系统创建一个管道文件类型为 p
2 该管道文件仅仅只是用来进行进程间通信不用于存储数据
3 对管道文件的操作可以使用open函数进行打开所以有名管道既可以用于亲缘进程间通信也可以用于非亲缘进程间通信
4 有名管道的api
int mkfifo(const char *pathname, mode_t mode);
3信号
1 信号是软件模拟底层硬件的中断操作中断打断当前正在进行的事情去做另一件事
2 信号是软件实现的中断是硬件实现的
3 信号是linux内核实现的没有linux就没有信号的概念
4 用户可以给某个进程发送信号一个进程也能给另一个进程发送信号内核也可以给某个进程发送信号
5 当一个进程收到信号后的操作有三种默认一般是杀死进程、捕获、忽略
6API
typedef void (*sighandler_t)(int); //自定义函数类型sighandler_t signal(int signum, sighandler_t handler); 4消息队列
消息队列APIftok、msgget、msgsnd、msgrcv、msgctl
key_t ftok(const char *pathname, int proj_id); //ftok(/, k);
功能通过给定的数据创建出一个用于IPC通信的key值int msgget(key_t key, int msgflg);
功能通过给定的key值以及消息队列的标识创建一个消息队列int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能向消息队列中存放数据ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
功能从消息队列中去一个消息int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能控制消息队列相关属性
5共享内存
共享内存的操作不是一次性的当共享内存段中的数据被读取后依然存在,共享内存是所有进程间通信方式中效率最高的原因是操作共享内存段时无需进行用户空间和内核空间的切换
共享内存的APIshmget、shmat、shmdt、shmctl
int shmget(key_t key, size_t size, int shmflg);
功能:获取共享内存段的ID void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:映射共享内存到用户空间 int shmdt(const void *shmaddr);
功能:撤销映射int shmctl(int shmid, int cmd, struct shmid_ds *buf);
功能操作共享内存
6信号量信号灯集
信号量是完成多个进程之间同步问题的
信号灯集的APIsemget、semctl、semop
int semget(key_t key, int nsems, int semflg);
功能创建信号灯集并返回该信号灯集的idint semctl(int semid, int semnum, int cmd, ...);
功能初始化信号灯集中信号灯的值或者删除信号灯集int semop(int semid, struct sembuf *sops, unsigned nsops);
功能:完成PV操作
7)socket
socket(网络通信中信息的载体)
1 socket最原始时期也是用来完成同一主机之间的两个进程间的通信随着TCP/IP协议族的引入也能完成跨主机之间进程的通信
2 socket本质上是一个套接字文件操作该文件时使用的是文件io操作实际操作的还是文件描述符
3 socket也是一个函数用于创建一个套接字
既可以创建TCP通信的套接字也适用于创建UDP通信的套接字
4 socket是系统给我们提供的函数他会将复杂的网络通信过程转换成我们熟悉的IO操作TCP/IP协议已经被集成到操作系统的内核中
使用socket进行通信相当于一种新型的IO操作
5 通过传参的形式来指定想要使用的协议
具体实现会根据我们传入的参数的不同来完成
对于该文件操作方式打开文件 -- 读写文件 -- 关闭文件