摘要: 管道是UNIX系统IPC的最古老的形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性:(1)历史上,它们是半双工的(即数据只能在一个方向上流动)。现在,某些系统提供全双工管道,但是为了最佳的可移植性,我们决不应预先假定系统使用此特性。(2)它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。(FIFO没有第二种局限性,UNIX域套接字和命名流管道则没有这两种局限性。)尽管有这两种局限性,半双工管道仍是最常用的IPC形式。每当你在管道线中键入一个由shell执行的命令序列时,shell为每一条命令单独创建一 阅读全文
posted @ 2014-02-21 20:50 ITtecman 阅读(3842) 评论(0) 推荐(0) 编辑
摘要: 进程之间相互通信的技术——IPC(InterPorcess Communication)。 UNIX系统IPC类型细分有以下9种: 半双工管道 FIFO 全双工管道 命名全双工管道 消息队列 信号量 共享存储 套接字 STREAMS 前7种(蓝色字体)IPC通常限于同一台主机的各个进程间的IPC。 最后两种(粉红色字体)IPC,即套接... 阅读全文
posted @ 2014-02-21 16:34 ITtecman 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 存储映射I/O(Memory-mapped I/O)使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。与此类似,将数据存入缓冲区,则相应字节就自动地写入文件。这样就可以在不使用read和write的情况下执行I/O。 为了使用这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中。这是由mmap函数实现的。 #include void... 阅读全文
posted @ 2014-02-21 16:14 ITtecman 阅读(1515) 评论(0) 推荐(0) 编辑
摘要: 管道、FIFO以及某些设备,特别是终端、网络和STREAMS设备有下列两种性质: (1)一次read操作所返回的数据可能少于所要求的数据,即使还没有达到文件尾端也可能是这样。这不是一个错误,应当继续读该设备。 (2)一次write操作的返回值也可能少于指定输出的字节数。这可能是由若干因素造成的,例如,下游模块的流量控制限制。这也不是错误,应当继续写余下的数据至该设备。(通常,只有对非阻塞描述符... 阅读全文
posted @ 2014-02-21 14:19 ITtecman 阅读(3963) 评论(0) 推荐(0) 编辑
摘要: readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读(scatter read)和聚集写(gather write)。#include ssize_t readv(int filedes, const struct iovec *iov, int iovcnt);ssize_t writev(int filedes, const struct iovec *iov, int iovcnt);两个函数的返回值:若成功则返回已读、写的字节数,若出错则返回-1这两个函数的第二个参数是指向iovec结构数组的一个指针:注:关于上面两个函数中第二个参数的说 阅读全文
posted @ 2014-02-21 13:43 ITtecman 阅读(17044) 评论(2) 推荐(3) 编辑