include#include
#include
#include
#include
#include
#include
int main();
struct iovec iov[3];
int i, nr, j;
for(i = 0; i < 3; i++)
ftruncate(fd, 0);
nr = writev(fd, iov, 3);
close(fd);
fd = open("
test
", o_rdwr);
char a[10], b[11], c[12];
iov[0].iov_base = a;
iov[0].iov_len = sizeof(a);
iov[1].iov_base = b;
iov[1].iov_len = sizeof(b);
iov[2].iov_base = c;
iov[2].iov_len = sizeof(c);
nr = readv(fd, iov, 3);
printf("
%d %d\n
", (int)iov[0].iov_base, (int)a);
for(i = 0; i < 3; i++)
close(fd);
return
0;}
和多次的線性i/o相比,向量i/o不僅減少了系統呼叫的次數,而且可以經過核心的優化提供效能的改善。乙個程序可以執行單次向量操作不會與另乙個程序的操作交叉在一起的風險。核心動態分配內部資料結構表示每個區段,但是如果小於8的話,核心會在它使用的堆疊上為段建立乙個小型的陣列,大小為8,這時就不需要動態分配了。
分散 聚集DMA 以及 scatterlist
我們知道對磁碟的每個io操作就是在磁碟與一些記憶體單元之間相互傳送一些相鄰扇區的內容。塊裝置驅動程式只要向磁碟控制器傳送一些適當的命令 如前面我們所講的scsi命令 就可以觸發一次資料傳送 一旦完成資料的傳送,控制器就會發出乙個中斷通知塊裝置驅動程式。大多數情況,磁碟控制器直接採用dma方式進行資料...
Java NIO 通道(二)通道分散 聚集
基於通道,nio又提供了另乙個重要功能,分散 scatter 和聚集 gather scatter 分散 指的是從通道中讀取 read 資料分散到多個緩衝區buffer中,該過程會將每個緩衝區填滿,直到通道中無資料或者緩衝區沒有空間。gather 聚集 指的是將多個緩衝區buffer聚集起來寫入 w...
ADS分散載入
ads分散載入檔案語法 執行域包含1個或多個輸入段 輸入段書寫格式 包括模組描述和段描述 模組描述 指定包含模組的檔案 包括目標檔案.o和庫檔案.lib 搜尋範圍,可以使用萬用字元 和?o 所有目標檔案 所有目標檔案和庫檔案 any 所有檔案 不論放在檔案哪個位置,本描述被最後解析,相當於 剩下的所...