IPC:进程间通信

IPC:interprocesscommunication 进程间通信。

 

ipc对象的持续性:

随进程持续:管道、互斥锁、条件变量、读写锁、fcntl记录上锁、套接字、posix基于内存的信号量

随内核持续:消息队列、信号量(posix有名信号量和system v信号量)、共享内存

 

在CS架构中,迭代服务器可能出现拒绝服务型攻击(DoS),所以要注意可能在哪里阻塞和阻塞多久。

解决DoS攻击的方法:

1.在迭代服务器中的阻塞设置超时时间。

2.使用并行服务器。

 

生产者消费者问题最好的解决方法就是IPC,避免产生死锁;

生产者往缓冲区放数据,消费者使用这些数据。

 

----------------------

IPC的3种技术:

 

进程(线程)间传递消息的6种接口:

1.管道

2.消息队列

3.过程调用

 

进程(线程)间同步的6种接口:

1.信号量(两种)

2.互斥量

3.条件变量

4.读写锁

5.记录上锁

 

进程(线程)间共享内存的2种接口:

1.匿名共享内存

2.有名共享内存

 

####################################################

posix的IPC:

 

posix信号量:

-lpthread

#include <semaphore.h>

 

posix消息队列:

-lrt

#include <mqueue.h>

 

posix共享内存

-lrt

#include <sys/mman.h>

 

posix的IPC函数都是库函数,还要包括头文件:

#include <fcntl.h>

#include <sys/stat.h>

 

使用相应的open函数创建或打开IPC时的参数:

 

name:

IPC的名字,Linux中的posix的IPC的名字要以 / 开头

 

oflags:

O_RDONLY:只读,不能用于信号量

O_WRONLY:只写,只能用于消息队列

O_RDWR:读写,不能用于信号量

O_CREAT:不存在就创建,存在就返回存在的

O_EXCL:非它性创建

O_NONBLOCK:非阻塞式IO,只用于消息队列

O_TRUNC:若存在则短截,只用于共享内存

 

whenoflags=O_CREAT   mode:指定权限位

S_IRUSR

S_IWUSR

S_IXUSR

S_IRGRP

S_IWGRP

S_IXGRP

S_IROTH

S_IWOTH

S_IXOTH

以上规则只适用于消息队列和信号量,共享内存的mode必须指定,如果没有指定O_CREAT,那么共享内存的mode=0.

 

####################################################

system v   IPC:

 

system v信号量

#include <sys/sem.h>

 

system v消息队列

#include <sys/msg.h>

 

system v共享内存

#include <sys/shm.h>

 

system v的IPC函数都是系统调用,还要包含头的文件:

#include <sys/ipc.h>

#include <sys/types.h>

 

使用相应的get函数创建或打开IPC使用key_t 作为他们的名字。

ftok函数把一个已存在的路径和一个整数标识符转换成key_t值,称为IPC键。

 

#include <sys/types.h>

#include <sys/ipc.h>

key_t ftok(const char *pathname, int proj_id);

所以system v的IPC的名字是一个文件,

linux中system v的IPC名字需要提前创建这个文件,才能用ftok转换。

 

内核给每个IPC对象维护的一个信息结构:

struct ipc_perm

{

IPC键:

    key_t __key;

属主ID:

    uid_t uid;

    gid_t gid;

创建者ID:

    uid_t cuid;

    gid_t cgid;

权限:

    unsigned short mode;

 

    unsigned short  __seq;

};

 

System v的IPC的查看和删除命令:

ipcs:查看system v的ipc

-m:共享内存

-q:消息队列

-s:信号量

 

ipcrm:删除system v的ipc

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。