5

Windows 是否在非 Cygwin 环境中提供类似于 writev 的功能?

理想情况下,答案将有一个适用于 Windows 的工作示例,类似于:

#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 日

到 Scatter Gather I/O 的链接似乎主要与 TCP/IP 网络有关(真的是 winsock)。另一个建议是 writefilegather,它是一种以非常特定的格式写入文件的解决方案。即 writev 使用 iov 容器(任意内存块)写入,而 writefilegather 使用与页表大小对齐的固定缓冲区。

4

1 回答 1

4

WSASend 函数可以发送一个 WSABUF 结构的数组

于 2013-12-12T14:48:33.613 回答