进程间通信的三种方式

进程通信:

终端:sigqueue:新的发送信号和消息的函数类似于kill

无名管道:父子间mkfifo  

守护进程:

会话:用户

会话其:对应一个用户,从一个用户的登陆到注销

进程组:一个会话其利诱多个进程组,一个进程组分为多个进程

终端:一个会话可以有一个中断或没有,在有的前提下,所以就会有一个千台进程组,所有的进成都依赖于该中断,中断关闭,进程都结束,

状态里代价好的是前台。

守护进程:

==========================================================

进程间通信:

共享内存:速度快,内存里开辟一块共享空间,所有进程都可访问

消息队列:缓冲区

信号量级:

7500 + 1200 = 8700

Ipc机制:posix机制

一. 共享内存      

a) 映射机制

i. 将文件映射为地址空间里,对地址操作 实际 就是对文件操作

ii. mmap(起始地址(NULL的话是系统分配),文件长度,期待获取的操作(读写执行),读写是否影响源文件,文件描述符,文件起始偏移量)

--期待获取的操作:执行(PORT_EXEC)  读(PORT_READ)  写(PORT_WRITE)

iii. 特别注意:映射的文件里不能为空,因为不能扩大源文件,只能读或修改,不能增加内容,不一定从头开始映射,不一定全部映射

iv. 返回值:返回起始地址  

1. 打开文件

2. 文件映射(不一定全部映射)

3. Scanf  memcpy  è写操作  mem头文件:string

4. 解除映射mummap()

5. 关闭文件

b) 键值:

i. 用于标识 共享内存、消息队列、信号量集,保证不同的进程都能找到同一个

ii. 创建:ftok(路径名,任意数)  返回一个整数,只要两个参数相同,返回值就一样

c) 创建共享内存,就像是全局变量一样,声明(映射)后即可使用

d) 注意使用完毕以后要 解除映射     删除共享内存  注册退出函数

i. 创建: mid:共享内存专用ID

mid=shmget(键值(IPC_PRIVATE(0)只用于父子之间),大小,没有的话新建)(新建或打开)

ii. 映射:首地址 = shmat(mid , NULL(地址),0);

iii. 写入:memcpy();  

iv. 分离/解除映射:shmdt(首地址);

v. 删除:shmctl(mid,命令,buf(如果删除这个参数为NULL)),所以mid得是全局的  

命令:IPC_STAT获取共享内存属性(第三个参数)  IPC_SET修改共享内存  IPC_RMID删除(第三个位NULL)   (NULL)

e) Ipcs用于查看:三者的资源、

===============================================-=====

二. 信号量集:用于同步和互斥

a) 当访问共同资源的时候 信号量:小于零的时候,才能访问信号两级的id  第几个(从零开始),命令  

b) 打开的时候为零。

c) Cmd是执行的操作

d)  设置多个信号量的操

三. 消息队列(队列的使用,必须要遵循  先创建è发送/接收è删除  三步走

一般用于发送方和接收方速度不同步的情况,一般是接收方阻塞等待

a) 

b) Ftok(“路径”,整数)   返回值:key_t  即唯一的键值,用于标识消息队列和IPC

c) Msgget(键值,操作)   

1. 如果创建,IPC_CREAT  

2. 如果要打开,就0,

3. 返回值:打开或者创建的消息队列的 ID  int类型的  打开失败 -1

d) Msgctl(消息队列id  操作 NULL):常常用来删除  队列  

1. 操作:IPC_RMID  标识删除

e) Msgsnd(队列id ,结构体(消息)的指针,消息大小减去4以后,阻塞(0)/非阻塞(IPC_NOWAIT)):

1. 消息结构体:struct msgp:

a) 第一个成员固定为long类型的 mtype(消息的类型,接收函数据此判断是否接受)  好处是不同的进程可以共用一个消息队列。

b) 实际的内容 其大小为sizeof(msgp) – sizeof(long)

f) Msgrcv(id ,接收结构体,大小,类型,是否阻塞):  从消息队列里取出信息

消息类型一般指定为  0~5可用于不同的进程

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值