档案消毒柜品牌:进程间的通信方式 四种

来源:百度文库 编辑:高考问答 时间:2024/05/04 18:29:30

现在最常用的进程间通信的方式有:信号,信号量,消息队列,共享内存。

所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些massege。

他们的使用方法是基本相同的,所以只要掌握了一种的使用方法,然后记住其他的使用方法就可以了。

1. 信号
在我学习的内容中,主要接触了信号来实现同步的机制,据说信号也可以用来做其它的事情,但是我还不知道做什么。

信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P,V操作来实现的。

使用信号要先知道有哪些信号,在Linux下有31个需要记住的通用信号,据说也是systemV中最常用的那些。这里略。

1. 1信号相关函数:
#include
int sigaction(int signo, const struct sigaction *act, struct sigaction
*oact);
该函数用来为进程安装信号处理器,struct sigaction数据是用来保存信号处理器的相关信息。

#include
int sigemptyset(sigset_t *set);
将信号集合清空。
int sigfillset(sigset_t *set);
将信号集合设置成包含所有的信号。在对信号进行操作以前一定要对信号集进行初始化。

int sigaddset(sigset_t *set, int signo);
向信号集中加入signo对应的新信号。
int sigdelset(sigset_t *set, int signo);
从信号集中删除signo对应的一个信号。
int sigismember(const sigset_t *set, int signo);
判断某个信号是否在信号集中。返回1则在,0则不在。

#include
int sigprocmask(int how,const sigset_t *set, sigset_t *oset);用来设置进程的信号屏蔽码。信号屏蔽码可以用来在某段时间内阻塞一些信号集中的信号,如果信号不在信号集中,就不必讨论它,因为肯定不响应,是否能生成也不肯定,我没有做过试验。

1.2我所理解的使用信号机制的方法:
使用信号,主要做的事情就是信号处理器的工作,这里面是你想做的事情。就像中断处理函数一样。

在使用信号以前,首先要初始化信号集,只有在信号集里面的信号才会被考虑。

有两种方法可以初始化信号集,一种是设置空信号集,一种是将所有的信号都加到信号集中。如果你自己想要的信号集不是这两种,可以在初始化了以后通过添加和删除信号进行定制。

如果在进程执行的一段时间内不想对某些信号进行响应,则可以使用sigprocmask对当前的信号集中的一些信号进行阻塞,稍后再执行。

管道、邮槽、剪切板、共享内存、window消息机制

信号量 共享内存 消息队列 管道 socket