筆者將《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];
}
複製代碼