笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级io和进程间通讯三大板块。本文是unix环境高级编程系列文章第三篇:高级IO和进程间通讯篇。该篇主要包括:linux
先介绍记录锁的概念和记录锁的数据结构。而后介绍阻塞io,非阻塞IO,异步io,IO多路转接等概念,后者都是针对前者更优的技术。IO多路转接技术包括:select,peslect,poll。最后介绍存储映射IO。shell
介绍了基本进程间通讯机制,包括两大类:编程
介绍网络间的进程通讯机制:套接字。首先是如何寻址。而后介绍socket编程的链接创建,数据传输等。数组
高级进程间通讯提供一种能够在进程间传递文件描述符的机制,包括STREAMS管道和unix域套接字服务器
struct flock{
short l_type;//F_RDLCK共享读锁,F_WRLCK独占写锁,F_UNLCK解锁
off_t l_start;//加锁区域其实位置
short l_whence;//和start一块儿肯定加锁位置
off_t l_len;//加锁长度
pid_t l_pid;//进程id
}
复制代码
pselect与select相似,仅仅少部分有差别,以下:网络
异步io并不像select和poll对全部文件描述符都生效数据结构
异步IO是SIGIO(通用异步io)和SIGURG(通知网络进程数据到达)两个信号的组合并发
进程间通讯机制包括:dom
消息队列,信号量和共享存储,这三种IPC称作XSI IPC,他们之间有不少共性,包括:异步
msgctl函数对队列执行多装操做(相似于ioctl,垃圾桶函数)
struct sockaddr{
sa_famliy_t sa_famliy;
char sa_data[];
}
复制代码
//linux实现
struct sockaddr{
sa_famliy_t sa_famliy;
char sa_data[14];
}
//freeBSD实现
struct sockaddr{
unsigned char sa_len;
sa_famliy_t sa_famliy;
char sa_data[14];
}
复制代码