int socketpair(int domain , int type , int protocol ,int fd[2]);
#include
int dup(int file_descriptor);
int dup2(int file_descriptor_one , int file_descriptor_two);
不繼承原檔案的屬性,如阻塞和非阻塞
用於重定向檔案、管道、網路連線
writev 多個塊整體寫,不用使用memcpy組到一起
readv 分塊讀
struct stat p;
stat("./a" ,&p);
p.st_mode & s_iroth;
sendfile 避免了核心空間和客戶空間之間的資料拷貝,直接進行檔案操作符之間的操作,效率很高,稱為零拷貝。
int connfd = accept(sock,(sockaddr*)&clientaddr , &client_len);
sendfile(connfd,filefd , null , stat_buf.st_size);
專為網路設計,效率變高
mmap的作用是申請一段程序間可以訪問的共享記憶體,munmap的作用是釋放mmap申請的記憶體;
#include
void *mmap(void *start ,size_t length, int port , int flags, int fd ,off_t offset);
int munmap(void *start ,size_t length);
port可選的引數有:
port_read 可讀
port_write 可寫
port_exec 可執行
port_none 不能被訪問
flags可選的引數有:
map_shared 在程序共享這段記憶體。對這段記憶體的修改將被對映到檔案中。提供共享記憶體的posix方法
map_private 記憶體呼叫為私有。這段記憶體的修改不會被對映到檔案中
map_anonymous 這段記憶體不是從檔案對映而來的,內容被初始化為0,。最後兩個引數被忽略
map_fixed 記憶體段必須位於start引數指定的位址,start的長度必須是記憶體頁片的4096倍;
map_hugetlb 按照大頁片分配記憶體空間
0拷貝操作,效率高;
#include
ssize_t splice ( int fd_in ,loff_t * off_in , int fd_out , loff_t off_out , size_t len , usigned int flags);
若 fd_in是管道, off_in = null
若fd_in不是管道,off_in = null ,從輸入資料的當前位置操作
若fd_in不是管道,off_in !=null,從off_in位置操作
flags的可選引數有:
splice_f_move
splice_f_noblock
splice_f_more
splice_f_gift
回射服務關鍵**:
......
int pipefd[2];
ret = pipe(pipefd);
ret = splice(connfd,null, pipefd[1],null,32768,splice_f_more | splice_f_move);
ret = splice(pipefd[0],null,connfd,null , 32768,splice_f_more | splice_f_move);
tee函式在兩個管道檔案描述符之間複製資料,也是零拷貝操作。不消耗資料,tee後還可以繼續接下來的處理
#include
ssize_t tee(int fd_in ,int fd_out , size_t len ,unsigned int flags);
#include < fcnlt.h>
int fcnlt(int fd , int cmd , ...)
cmd的可選值為
複製檔案操作描述符:
f_dupfd
f_dupfd_closeexec
獲取和設定檔案操作描述符的標誌:
f_getfd
f_setfd
獲取和設定檔案操作描述符的狀態標誌:
f_setfl
管理訊號:
f_getown
f_setown
f_getsig
f_setsig
操作管道容量:
f_setpipe
f_getpipe
fcnlt的應用,設定非阻塞;
int setnonblocking(int fd)
int old_option = fcnlt(fd , f_getfl);
int new_option = old_option | o_nonblock;
fcnlt(fd , f_setfl , new_option);
return new_option;
}
linux高效能伺服器程式設計
linux高效能伺服器程式設計 當當網 亞馬遜 目錄 第一章 tcp ip協議族 第二章 ip協議族 第三章 tcp協議詳解 第四章 tcp ip通訊案例 訪問internet 第五章 linux網路程式設計基礎api 第六章 高階io函式 第七章 linux伺服器程式規範 第八章 高效能伺服器框架...
linux 高效能伺服器程式設計
1.高效能定時器 時間輪,時間堆 處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件 2.高效能伺服器程式框架 nginx 使用的是基於事件模型,epoll,不阻塞,非同步處理 兩種高效的事件處理模式 reactor模式 proactor模式 兩種高效的併發模式 半同步 半非同步模式 領導者...
linux高效能伺服器程式設計(1)
linux網路程式設計基礎api 1 socket位址api 2 sockt基礎api sockt的api全部定義在sys socket.h檔案中,包括 建立socket,命名socket,監聽socket,接受連線,發起連線,讀寫資料,獲取位址資訊,檢測帶外標記,以及讀取和設定socket選項。3...