2012-08-09 27 views
2

Windows在非Cygwin環境中提供與writev類似的任何東西嗎?windows上的writev

理想的情況下,答案將會對窗口工作示例,沿着線的東西:

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <sys/uio.h> 

int main() { 
    struct iovec iov[2]; 
    char blah[][20] = { "mickey", " mouse" }; 
    int fd = open ("/tmp/mice.txt", O_WRONLY | O_CREAT); 
    iov[0].iov_base=blah[0]; 
    iov[1].iov_base=blah[1]; 
    iov[0].iov_len=iov[1].iov_len=6; 
    writev(fd, iov, 2); 
    close(fd); 
} 

答案應該是如何通過系統調用來解決這個問題。具體而言,我期望避免將單個緩衝區複製到單個更大的緩衝區中以執行寫入操作。此外,由此產生的寫入應該是一個單一的大寫請求,而不是類似執行緩衝IO的fwrite。


編輯:12年8月13日

鏈接到分散收集I/O似乎主要涉及到TCP/IP網絡(ERR的Winsock真的)。另一個建議是writefilegather,它是一種用於以非常特定的格式編寫文件的解決方案。即而writev使用iov容器(任意內存塊)寫入,writefilegather使用與頁表大小對齊的固定緩衝區。

+1

[分散/聚集I/O](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740138(V = VS。 85).aspx) – jxh 2012-08-09 21:08:06

+0

分散/聚集I/O鏈接似乎屬於Windows套接字,這是用於文件描述符。 – Claris 2012-08-09 21:10:27

+3

[WriteFileGather](http://msdn.microsoft.com/zh-cn/library/aa365749%28v=VS.85%29.aspx)。請注意,我不是一個Windows程序員。我的幫助更多的是關於搜索條件。 – jxh 2012-08-09 21:12:41

回答