ipc 总结上

#2019年ipc知识点回顾

####首先我们要注意的是ipc对象的可持续性

随进程的持续性:

```
管道、FIFO、posix互斥锁、posix条件变量、posix读写锁、fcntl记录上锁、posix基于内存的信号量、tcp、udp以及域套接字
```

随内核的持续性

```
消息队列,共享内存,信号量
```

####fork exec exit对ipc产生的影响

这一点书中有描写我们要格外注意,

见:
https://blog.csdn.net/ctthuangcheng/article/details/9334359


####systemv消息有一个共性,要使用ftok创建一个key_t键

IPC_PRIVATE可以申请一个唯一的key_t

####管道和FIFO

管道的三种管道:

1.无名管道 

pipe只能在有血缘关系的进程之间使用

注意PIPE_BUF之内的请求才会保证原子性

2.popen和pclose

popen打开程序并且取得返回结果

3.fifo

mkfifo可以用在没有学院关系的进程之间通讯。

4.fcntl可以设置套接字阻塞模式,以及读写等其他额外属性

   long mq_maxms   long mq_maxmsg; //队列中包含的消息数的最大限制数    long mq_msgsize; //每个消息大小的最大限制数   long mq_maxmsg; //队列中包含的消息数的最大限制数    long mq_msgsize; //每个消息大小的最大限制数g; //队列中包含的消息数的最大限制数    long mq_msgsize; //每个消息大小的最大限制数
####posix消息队列

常用的posix消息队列的操作函数:

mq_open和mq_close 和mq_unlink

我们要清楚mq_close和mq_unlink的区别,由于消息队列是随内核持续影响的,所以我们使用mq_close知识在进程中关闭并没有在内核中删除我们要使用mq_unlink删除掉他。


我们可以使用mq_getattr和mq_setattr返回所有的这些属性,mq_setattr可以设置的属性

```
    struct mq_attr{
        long mq_flags;//阻塞位置
        long mq_maxmsg;//最大个数
        long mq_msgsize;//最大消息尺寸
        long curmsgs;//当前队列消息数
    }
```


可以使用mq_send和mq_receive来收发数据,我们mq_receive之前一定要getattr获取最大长度再分配区域去接收,系统级别的可以用setconfig去获得参数


mq_notify 

当队里里出现数据的时候触发信号,我们使用signal要注意函数的安全性。还有信号我们要注意实时信号和非实时信号这个概念。

####systemv消息队列

msgget函数用于创建
和msgsnd函数用于发送
msgrcv函数可以用来接收

msgctl可以删除内核中的消息队列以及设置属性


####互斥锁

互斥锁的创建 以及销毁 

pthread_mutex_init 初始化动态锁

静态所使用pthread_mutex mutex=PTHREAD_MUTEX_INITIALIZER

pthread_mutex_lock创建所

pthread_mutex_unlock解锁

pthread_mutexattr_init初始化

pthread_mutexattr_destroy销毁属性

pthread_mutexattr_setpshared设置共享锁 

pthread_mutexattr_setpshared 过去共享锁

pthread_cond_init初始化

pthread_cond_destroy销毁 

pthread_cond_signal发送信号解锁 

pthread_condattr_setpshared 设置条件变量共享属性

pthread_condattr_getpshared 获取条件变量共享属性 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值