linux进程间通讯

linux进程间通讯

ID:39970458

大小:682.81 KB

页数:22页

时间:2019-07-16

linux进程间通讯_第1页
linux进程间通讯_第2页
linux进程间通讯_第3页
linux进程间通讯_第4页
linux进程间通讯_第5页
资源描述:

《linux进程间通讯》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux进程间通讯目录LinuxIPC概述信号(signal)信号量(semaphore)消息队列命名管道共享内存套接字LinuxIPC概述信号(signal):亲缘进程和非亲缘进程都可以,也可以进程自己给自己递送信号。信号量(semaphore):主要是线程间和亲缘进程间的同步手段,不做数据传输之用。消息队列:就是一个消息的链表。就是把消息看作一个记录,并且这个记录具有特定的格式以及特定的优先级。管道:只允许亲缘进程间的通讯。命名管道(FIFO):除了亲缘进程可以通讯外,非亲缘进程也可以通讯。共享内存:多个进程可以访问

2、同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝。套接字:最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。信号(signal)信号(signal)是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就忽略该信号;如果是SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号

3、指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数,返回后再继续执行被中断的任务。简单signal函数typedefvoid(*sighandler_t)(int)sighandler_tsignal(intsignum,sighandler_thandler);返回原信号处理函数,或SIG_ERRsignal()是最简单的给进程安装信号处理器的函数,第一个参数指定信号,第二个参数为该信号指定一个处理函数。信号屏蔽字(processsignalmask)每个进程都会有一个信号屏蔽字,它规

4、定了当前进程要阻塞的信号集。对于每种可能的信号,信号屏蔽字中都会有一位与之对应,如果该位被设置,该信号当前就是阻塞的。进程可以通过sigprocmask()来获得和修改当前进程的信号屏蔽字。信号集(signalset)信号集是一种特殊的数据类型,由于无法确定信号的多少,所以不能用简单数据类型来包含所有可能的信号,所以系统就定义了一个sigset_t的数据类型专门用于信号集。同时还定义了一族用于处理信号集的函数。这样用户可以不必关心信号集的实现,只要使用这组函数来处理信号集就可以了。信号集函数intsigemptyset(s

5、igset_t*set);intsigfillset(sigset_t*set);intsigaddset(sigset_t*set,intsignum);intsigdelset(sigset_t*set,intsignum);intsigismember(sigset_t*set,intsignum);sigemptyset()和sigfillset()都用于初始化一个信号集,前者用于清空信号集中所有的信号,后者则用于设置信号集中所有的信号;信号集在使用前必须要经过初始化,初始化后,就可以用sigaddset()和si

6、gdelset()往信号集里添加删除信号了。sigismember()用于判断指定信号是否在信号集中。信号量(semaphore)信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()减少信号量。函数sem_trywait()和函数pthread_mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。它们都在头文件/usr/include/semap

7、hore.h中定义。信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:externintsem_init__P((sem_t*__sem,int__pshared,unsignedint__value));sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;value给出了信号量的初始值。函数sem_post(sem_t*sem)用来增加信号量的值。当有线程阻塞在这个信号量上时,调用这个函数会使其

8、中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。函数sem_wait(sem_t*sem)被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait(sem_t*sem)是函数sem_wait()的非阻塞版本,它直接将信号量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。