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使用与页表大小对齐的固定缓冲区。