写在窗户上

时间:2012-08-09 21:03:26

标签: c windows unix file-io

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那样。


修改:8月13日

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

1 个答案:

答案 0 :(得分:2)

WSASend function可以发送一组WSABUF结构