上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 59 下一页
摘要: POSIX信号量接口,意在解决XSI信号量接口的几个不足之处:POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现。POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉的文件系统操作。POSIX信号量删除时的处理更加合理。XSI信号量被删除后,使用该信号量标识符的操作将会出错返回,并将errno设置为EIDRM。而对于POSIX信号量,操作可以继续正常执行,直到对该信号量的最后一个引用被释放。POSIX信号量有两种形式可供选用:有名和无名。它们的区别在于,如何被创建和销毁,其他方面则完全相同。无名信号量只存在于内存中,并且规定能够访问该内存的进程才能够使用该内存中的 阅读全文
posted @ 2014-02-24 11:25 ITtecman 阅读(4852) 评论(0) 推荐(0) 编辑
摘要: 共享存储允许两个或更多进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。使用共享存储时要掌握的唯一窍门是多个进程之间对一个给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享存储访问的同步。(记录锁也可以用于这种场合。) 内核为每个共享存储段设置了一个shmid... 阅读全文
posted @ 2014-02-23 22:13 ITtecman 阅读(2646) 评论(0) 推荐(0) 编辑
摘要: 信号量(semaphore)与已经介绍过的IPC机构(管道、FIFO以及消息队列)不同。它是一个计数器,用于多进程对共享数据对象的访问。为了获得共享资源,进程需要执行下列操作:(1)测试控制该资源的信号量。(2)若此信号量的值为正,则进程可以使用该资源。进程将信号量值减1,表示它使用了一个资源单位。(3)若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0.进程被唤醒后,它返回至第(1)步。当进程不再使用由一个信号量控制的共享资源时,该信号量值增1。如果有进程正在休眠等待此信号量,则唤醒它们。为了正确地实现信号量,信号量值的测试及减1操作应当是原子操作。为此,信号量通常是在内核中实现的。 阅读全文
posted @ 2014-02-23 16:11 ITtecman 阅读(1928) 评论(0) 推荐(0) 编辑
摘要: 消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。在本节中,我们把消息队列简称为队列(queue),其标识符为队列ID(queue ID)。msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息添加到队列尾端。每个消息包含一个正长整型类型字段,一个非负长度以及实际数据字节(对应于长度),所有这些都在将消息添加到队列时,传送给msgsnd。msgrcv用于从队列中取消息。我们并不一定要以先进先出次序取消息,也可以按消息的类型字段取消息。每个队列都有一个msgqid_ds结构与其相关联:struct msqid_ds { struct ipc_perm ms... 阅读全文
posted @ 2014-02-23 13:15 ITtecman 阅读(2789) 评论(0) 推荐(0) 编辑
摘要: XSI IPC源自于系统V的IPC功能。有三种IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器,它们之间有很多相似之处。1、标识符和键每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符(identifier)加以引用。例如,为了对一个消息队列发送或取消息,只需要知道其队列标识符。与文件描述符不同,IPC标识符不是小的整数。当一个IPC结构被创建,以后又被删除时,与这种结构相关的标识符连续加1,直到达到一个整型数的最大正值,然后又回转到0.标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上会合,需要提供一个外部名方案。为此使用了键(key 阅读全文
posted @ 2014-02-23 10:40 ITtecman 阅读(2484) 评论(0) 推荐(0) 编辑
摘要: FIFO有时被称为命名管道。管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道。但是,通过FIFO,不相关的进程也能交换数据。 FIFO是一种文件类型(参考http://www.cnblogs.com/nufangrensheng/p/3501533.html)。stat结构(http://www.cnblogs.com/nufangrensheng/p/3501385.html)成员... 阅读全文
posted @ 2014-02-23 09:09 ITtecman 阅读(3522) 评论(0) 推荐(0) 编辑
摘要: UNIX系统过滤程序从标准输入读取数据,对其进行适当处理后写到标准输出。几个过滤程序通常在shell管道命令行中线性地连接。当一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出时,则该过滤程序就成为协同进程(coprocess)。 Korn shell提供了协同进程。Bourne shell、Bourne-again shell和C shell并没有提供按协同进程方式将进程连接起来的方法... 阅读全文
posted @ 2014-02-22 22:21 ITtecman 阅读(2871) 评论(1) 推荐(0) 编辑
摘要: 常见的操作是创建一个管道连接到另一个进程,然后读其输出或向其输入端发送数据,为此,标准I/O库提供了两个函数popen和pclose。这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止。#include FILE *popen(const char *cmdstring, const char *type);返回值:若成功则返回文件指针,若出错则返回NULLint pclose(FILE *fp);返回值:cmdstring的终止状态,若出错则返回-1函数popen先执行fork,然后调用exec以执行cmdst 阅读全文
posted @ 2014-02-22 19:53 ITtecman 阅读(8454) 评论(0) 推荐(0) 编辑
摘要: 管道是UNIX系统IPC的最古老的形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性:(1)历史上,它们是半双工的(即数据只能在一个方向上流动)。现在,某些系统提供全双工管道,但是为了最佳的可移植性,我们决不应预先假定系统使用此特性。(2)它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。(FIFO没有第二种局限性,UNIX域套接字和命名流管道则没有这两种局限性。)尽管有这两种局限性,半双工管道仍是最常用的IPC形式。每当你在管道线中键入一个由shell执行的命令序列时,shell为每一条命令单独创建一 阅读全文
posted @ 2014-02-21 20:50 ITtecman 阅读(3827) 评论(0) 推荐(0) 编辑
摘要: 进程之间相互通信的技术——IPC(InterPorcess Communication)。 UNIX系统IPC类型细分有以下9种: 半双工管道 FIFO 全双工管道 命名全双工管道 消息队列 信号量 共享存储 套接字 STREAMS 前7种(蓝色字体)IPC通常限于同一台主机的各个进程间的IPC。 最后两种(粉红色字体)IPC,即套接... 阅读全文
posted @ 2014-02-21 16:34 ITtecman 阅读(254) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 59 下一页